各种小问题

来源:互联网 发布:mysql入门经典 编辑:程序博客网 时间:2024/06/08 06:24

1. 2数据包和数据报区别

数据包(Packet),是TCP/IP协议通信传输中的数据单位。

数据报(Datagram

“包”是在第三层,而“报”是更高层的第四层传输层来讲的。你可以说数据报是面向无连接(虚电路)传输的数据单元,却不是在此时把“数据报”替换成“数据包”。

2. C mysql中文字符编码错误,设置成为UTF8

if(!mysql_set_character_set(conn, "utf8"))

{

printf("New client character set: %s\n", mysql_character_set_name(conn));

}

3. 线程接收后释放资源:设置线程游离状态,退出后自动释放资源。

pthread_detach(pthread_self());

4.core 文件设置

查看 ulimit -c , 若为0则关闭

打开core 命令: ulimit -c unlimited 

关闭core 命令:ulimit -c 0

只使用于当前会话

修改文件则是全局

ulimit -c 0

core文件需要使用gdb来查看。
 gdb ./a.out
 core-file core.xxxx
 使用bt命令即可看到程序出错的地方。

5.gettimeofday clock

使用C语言编写程序需要获得当前精确时间(UNIX到现在的时间),或者为执行计时,可以使用gettimeofday()函数。它的[1]:

#include <sys/time.h>

int gettimeofday(struct timeval*tv, struct timezone *tz);

其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:

struct timezone{

int tz_minuteswest;/*格林威治时间往西方的时差*/

int tz_dsttime;/*DST 时间的修正方式*/

}

timezone 参数若不使用则传入NULL即可。

而结构体timeval的定义为:

structtimeval{

long int tv_sec; // 秒数

long int tv_usec; // 微秒数

}

它获得的时间精确到微秒(1e-6 s)量级。在一段代码前后分别使用gettimeofday可以计算代码执行时间:

structtimevaltv_begin, tv_end;

gettimeofday(&tv_begin, NULL);

foo();

gettimeofday(&tv_end, NULL);

执行时间(微秒) = 1000000 * (tv_end.tv_sec - tv_begin.tv_sec) + tv_end.tv_usec - tv_begin.tv_usec;

6.DCA高级缓存访问

而直接DCA(高级缓存访问)是I/O AT 2在原有基础上增加了的工作模式,这是一项快速响应、增强性能的新特性。基本工作原理是使得CPU高速缓存中的数据可以被网络控制器优先访问,一方面充分利用缓存中的数据,另外一个方面利用高速缓存低延迟的特性,来避免CPU频繁的访问内存,降低系统开销。DCA有两种基本的工作模式,当处理小型I/O任务的时候,甚至不需要芯片组中QuickData引擎的参与,只有当处理大型I/O任务的时候才需要。DCA的意义在于,数据包尽可能采用最近最快的途径,进入CPU的高速缓存中被优先访问,这将极大降低CPU的数据存取延迟。

http://blog.csdn.net/force_eagle/article/details/4676276

连接文件

$ ldd 文件名

$ sudo ln -s 

8. 打开网卡混杂模式

ifconfig eth0 promisc

9. Last , lastlog两个命令

记录登录的信息

10. MYSQL在 C API 中可用的函数:

mysql_affected_rows()返回被最新的UPDATE, DELETE或INSERT查询影响的行数。mysql_close()关闭一个服务器连接。mysql_connect()连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。mysql_change_user()改变在一个打开的连接上的用户和数据库。mysql_create_db()创建一个数据库。该函数不推荐;而使用SQL命令CREATE DATABASE。mysql_data_seek()在一个查询结果集合中搜寻一任意行。mysql_debug()用给定字符串做一个DBUG_PUSH。mysql_drop_db()抛弃一个数据库。该函数不推荐;而使用SQL命令DROP DATABASE。mysql_dump_debug_info()让服务器将调试信息写入日志文件。mysql_eof()确定是否已经读到一个结果集合的最后一行。这功能被反对; mysql_errno()或mysql_error()可以相反被使用。mysql_errno()返回最近被调用的MySQL函数的出错编号。mysql_error()返回最近被调用的MySQL函数的出错消息。mysql_escape_string()用在SQL语句中的字符串的转义特殊字符。mysql_fetch_field()返回下一个表字段的类型。mysql_fetch_field_direct ()返回一个表字段的类型,给出一个字段编号。mysql_fetch_fields()返回一个所有字段结构的数组。mysql_fetch_lengths()返回当前行中所有列的长度。mysql_fetch_row()从结果集合中取得下一行。mysql_field_seek()把列光标放在一个指定的列上。mysql_field_count()返回最近查询的结果列的数量。mysql_field_tell()返回用于最后一个mysql_fetch_field()的字段光标的位置。mysql_free_result()释放一个结果集合使用的内存。mysql_get_client_info()返回客户版本信息。mysql_get_host_info()返回一个描述连接的字符串。mysql_get_proto_info()返回连接使用的协议版本。mysql_get_server_info()返回服务器版本号。mysql_info()返回关于最近执行得查询的信息。mysql_init()获得或初始化一个MYSQL结构。mysql_insert_id()返回有前一个查询为一个AUTO_INCREMENT列生成的ID。mysql_kill()杀死一个给定的线程。mysql_list_dbs()返回匹配一个简单的正则表达式的数据库名。mysql_list_fields()返回匹配一个简单的正则表达式的列名。mysql_list_processes()返回当前服务器线程的一张表。mysql_list_tables()返回匹配一个简单的正则表达式的表名。mysql_num_fields()返回一个结果集合重的列的数量。mysql_num_rows()返回一个结果集合中的行的数量。mysql_options()设置对mysql_connect()的连接选项。mysql_ping()检查对服务器的连接是否正在工作,必要时重新连接。mysql_query()执行指定为一个空结尾的字符串的SQL查询。mysql_real_connect()连接一个MySQL服务器。mysql_real_query()执行指定为带计数的字符串的SQL查询。mysql_reload()告诉服务器重装授权表。mysql_row_seek()搜索在结果集合中的行,使用从mysql_row_tell()返回的值。mysql_row_tell()返回行光标位置。mysql_select_db()连接一个数据库。mysql_shutdown()关掉数据库服务器。mysql_stat()返回作为字符串的服务器状态。mysql_store_result()检索一个完整的结果集合给客户。mysql_thread_id()返回当前线程的ID。mysql_use_result()初始化一个一行一行地结果集合的检索。

Wireshark的过滤规则 

2011-11-04 16:53:21| 分类: 网络技术 | 标签: |字号大中小订阅

Wireshark的过滤规则 

2010-02-09 21:22:46| 分类: TCP/IP协议 |字号订阅

WireShark 过滤语法

1. 过滤IP,如来源IP或者目标IP等于某个IP
例子:
ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107
或者
ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP

2. 过滤端口
例子:
tcp.port eq 80 // 不管端口是来源的还是目标的都显示
tcp.port == 80
tcp.port eq 2722
tcp.port eq 80 or udp.port eq 80
tcp.dstport == 80 // 只显tcp协议的目标端口80
tcp.srcport == 80 // 只显tcp协议的来源端口80

udp.port eq 15000

过滤端口范围
tcp.port >= 1 and tcp.port <= 80

3. 过滤协议
例子:
tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
oicq
bootp
等等

排除arp包,如!arp 或者 not arp

4. 过滤MAC
太以网头过滤
eth.dst == A0:00:00:04:C5:84 // 过滤目标mac
eth.src eq A0:00:00:04:C5:84 // 过滤来源mac
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
eth.addr eq A0:00:00:04:C5:84 // 过滤来源MAC和目标MAC都等于A0:00:00:04:C5:84的

less than 小于 < lt
 小于等于 le

等于 eq

大于 gt
大于等于 ge

不等 ne


5. 包长度过滤
例子:
udp.length == 26 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >= 7 指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
frame.len == 119 整个数据包长度,从eth开始到最后

eth ---> ip or arp ---> tcp or udp ---> data

6. http模式过滤
例子:
http.request.method == "GET"
http.request.method == "POST"
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1."

// GET包
http.request.method == "GET" && http contains "Host: "
http.request.method == "GET" && http contains "User-Agent: "
// POST包
http.request.method == "POST" && http contains "Host: "
http.request.method == "POST" && http contains "User-Agent: "
// 响应包
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
http contains "HTTP/1.0 200 OK" && http contains "Content-Type: "
一定包含如下
Content-Type:


7. TCP参数过滤
tcp.flags 显示包含TCP标志的封包。
tcp.flags.syn == 0x02 显示包含TCP SYN标志的封包。
tcp.window_size == 0 && tcp.flags.reset != 1

8. 过滤内容

tcp[20]表示从20开始,取1个字符
tcp[20:]表示从20开始,取1个字符以上
tcp[20:8]表示从20开始,取8个字符
tcp[offset,n]

udp[8:3]==81:60:03 // 偏移8个bytes,再取3个数,是否与==后面的数据相等?
udp[8:1]==32 如果我猜的没有错的话,应该是udp[offset:截取个数]=nValue
eth.addr[0:3]==00:06:5B

例子:
判断upd下面那块数据包前三个是否等于0x20 0x21 0x22
我们都知道udp固定长度为8
udp[8:3]==20:21:22

判断tcp那块数据包前三个是否等于0x20 0x21 0x22
tcp一般情况下,长度为20,但也有不是20的时候
tcp[8:3]==20:21:22
如果想得到最准确的,应该先知道tcp长度

matches(匹配)和contains(包含某字符串)语法
ip.src==192.168.1.107 and udp[8:5] matches "\\x02\\x12\\x21\\x00\\x22"
ip.src==192.168.1.107 and udp contains 02:12:21:00:22
ip.src==192.168.1.107 and tcp contains "GET"
udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配。

例子:
得到本地qq登陆数据包(判断条件是第一个包==0x02,第四和第五个包等于0x00x22,最后一个包等于0x03)
0x02 xx xx 0x00 0x22 ... 0x03
正确
oicq and udp[8:] matches "^\\x02[\\x00-\\xff][\\x00-\\xff]\\x00\\x22[\\x00-\\xff]+\\x03$"
oicq and udp[8:] matches "^\\x02[\\x00-\\xff]{2}\\x00\\x22[\\x00-\\xff]+\\x03$" // 登陆包
oicq and (udp[8:] matches "^\\x02[\\x00-\\xff]{2}\\x03$" or tcp[8:] matches "^\\x02[\\x00-\\xff]{2}\\x03$")
oicq and (udp[8:] matches "^\\x02[\\x00-\\xff]{2}\\x00\\x22[\\x00-\\xff]+\\x03$" or tcp[20:] matches "^\\x02[\\x00-\\xff]{2}\\x00\\x22[\\x00-\\xff]+\\x03$")

不单单是00:22才有QQ号码,其它的包也有,要满足下面条件(tcp也有,但没有做):
oicq and udp[8:] matches "^\\x02[\\x00-\\xff]+\\x03$" and !(udp[11:2]==00:00) and !(udp[11:2]==00:80)
oicq and udp[8:] matches "^\\x02[\\x00-\\xff]+\\x03$" and !(udp[11:2]==00:00) and !(udp[15:4]==00:00:00:00)
说明:
udp[15:4]==00:00:00:00 表示QQ号码为空
udp[11:2]==00:00 表示命令编号为00:00
udp[11:2]==00:80 表示命令编号为00:80
当命令编号为00:80时,QQ号码为00:00:00:00

得到msn登陆成功账号(判断条件是"USR 7 OK ",即前三个等于USR,再通过两个0x20,就到OK,OK后面是一个字符0x20,后面就是mail了)
USR xx OK mail@hotmail.com
正确
msnms and tcp and ip.addr==192.168.1.107 and tcp[20:] matches "^USR\\x20[\\x30-\\x39]+\\x20OK\\x20[\\x00-\\xff]+"

9. dns模式过滤

10. DHCP
以寻找伪造DHCP服务器为例,介绍Wireshark的用法。在显示过滤器中加入过滤规则,
显示所有非来自DHCP服务器并且bootp.type==0x02(Offer/Ack)的信息:
bootp.type==0x02 and not ip.src==192.168.1.1

11.msn
msnms && tcp[23:1] == 20 // 第四个是0x20的msn数据包
msnms && tcp[20:1] >= 41 && tcp[20:1] <= 5A && tcp[21:1] >= 41 && tcp[21:1] <= 5A && tcp[22:1] >= 41 && tcp[22:1] <= 5A
msnms && tcp[20:3]=="USR" // 找到命令编码是USR的数据包
msnms && tcp[20:3]=="MSG" // 找到命令编码是MSG的数据包
tcp.port == 1863 || tcp.port == 80

如何判断数据包是含有命令编码的MSN数据包?
1)端口为1863或者80,如:tcp.port == 1863 || tcp.port == 80
2)数据这段前三个是大写字母,如:
tcp[20:1] >= 41 && tcp[20:1] <= 5A && tcp[21:1] >= 41 && tcp[21:1] <= 5A && tcp[22:1] >= 41 && tcp[22:1] <= 5A
3)第四个为0x20,如:tcp[23:1] == 20
4)msn是属于TCP协议的,如tcp

不同的Linux之间copy文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。

第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。

第三种就是利用scp命令来进行文件复制。

scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root

然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了。

如果想反过来操作,把文件从远程主机copy到当前系统,也很简单。

scp root@/full.tar.gz 172.19.2.75:/home/root/full.tar.gz home/daisy/full.tar.gz

0 0
原创粉丝点击