linux tcpdump 及 windows wireshark 使用整理

来源:互联网 发布:2016陈子豪刷枪软件 编辑:程序博客网 时间:2024/06/13 03:20

本文参考网络中其他博客文章,根据自己使用整理归纳

参考资料网址:http://blog.csdn.net/s_k_yliu/article/details/6665673/

http://blog.csdn.net/hzhsan/article/details/43453251

http://www.360doc.com/content/13/0702/10/1073512_297069771.shtml

Linux tcpdump 命令

1 可能常用的参数

-i 指定进行抓包的网口 例如 -i eth0

host 指定IP,不区分源目的IP

src host 指定源IP

dst host 指定目的IP

port 指定端口

port 指定端口,不区分源目的端口

src port 指定源端口

dst port 指定目的端口

-t 不在每一行输出时间戳

-tt 在每一行输出非格式化的时间戳

-ttt 每行输出与上一行的间隔时间

-tttt 每行输出date的时间戳

-vv (两个v) 输出更加详细的报文信息

-nnl 直接以 IP 及 Port Number 显示,而非主机名与服务名称。

-w  将抓包数据写入文件,写成 .pcap格式,拉到windows下,wireshark直接可以读取解析

-e 打印数据链路层的信息 如mac地址

2 用例

# 抓取eth0 网口 源或者目的ip有192.168.8.45的并且port有7795的通信包,并把数据写入package.pcap文件

tcpdump -i eth0 host 192.168.8.45 and port 7795 -nnl -w package.pcap

# 过滤源主机为192.168.8.45 目的ip为192.168.192.0/24的包

tcpdump src host 192.168.8.45 and dst net 192.168.192.0/24

wireshark 过滤规则

1 过滤协议,在wireshark filter栏中输入过滤内容

arp tcp udp ftp icmp http 

2 过滤ip

ip.addr eq 192.168.2.192

ip.src eq 192.168.2.192

ip.dst eq 192.168.2.192

ip.host eq x.x.x.xip.src_host eq x.x.x.xip.dst_host eq x.x.x.x

3端口过滤

tcp.port == 7795 或者tcp.port eq 7795 

tcp.srcport == 7795

tcp.dstport == 7795

tcp.port > 7788 and tcp.port < 7808 过滤端口范围

4tcp 参数过滤

tcp.flags.reset == 0x02 查看一个reset的包

tcp.flags.res = 0x02 查看重传包

5http 过滤

http.request.method == "GET"

http.request.uri=="/img/logo-edu.gif"

http contains "GET"

// 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:"

6 包长度过滤

ip.len tcp.len udp.len


3 wireshark tcp常见的几个问题

1 tcp out-of-order 乱序
多半是网络拥塞,导致顺序包抵达时间不同,延时太长,或者包丢失,
需要重新组合数据单元 因为他们可能是通过不同的路径到达你电脑上面的。
2 tcp segment of a reassembled PDU
1)在连个连接建立的时候,SYN包里面会把彼此TCP最大的报文段长度,
在局域网内一般都是1460.如果发送的包比最大的报文段长度长的话就要分片了,
被分片出来的包,就会被标记了“TCP segment of a reassembled PDU”

TCP在发起连接的第一个报文的TCP头里通过MSS这个可选项告知对方本端能够接收的最大报文
tcp的MSS一般会设置成1460byte 因为链路层最大的报文一般会设置成1500(系统的MTU),
tcpMSS1460+tcp head 20byte + ip head 20byte == 1500

当出现tcp分片,但是len却小于1460的时候,可以去查一下系统的MTU。
也需要确认一下连接建立的时候,MSS的值


3 Tcp previous segment lost tcp分片丢失
4 Tcpacked lost segment tcp应答丢失
5 Tcp window update tcp窗口更新
6 Tcp window update tcp重复应答
收到出问题的tcp分片包的时候
7 tcp keep alive tcp保持活动
在TCP中有一个Keep-alive的机制可以检测死连接,原理很简单,TCP会在空闲了一定时间后发送数据给对方:

1).如果主机可达,对方就会响应ACK应答,就认为是存活的。
2).如果可达,但应用程序退出,对方就发RST应答,发送TCP撤消连接。
3).如果可达,但应用程序崩溃,对方就发FIN消息。
4).如果对方主机不响应ack, rst,继续发送直到超时,就撤消连接。这个时间就是默认的二个小时。

8 Tcp retransmission tcp重传
作为一个可靠的传输协议,传输控制协议(TCP)在发送主机需要从目标主机收到一个包时确认。
If the sender does not receive that acknowledgment within a certain amount of time, 
it acts under the assumption that the packet did not reach its destination and 
retransmits the packet.如果发件人没有收到的时间内一定之金额,确认,它的行为假设下,
该数据包没有到达其目的地,以及转发数据包。

9 RST 重置
几种tcp重置的情况分析:
1) 端口未打开,
2) 请求超时,telnet 和 ping都没有发现问题,注意看程序的setsockopt的
SO_RCVTIMEO设置了多少,置了100ms,而网络延时超过了100ms,此时会出问题
3) 提前关闭 
tcp是一种可靠的链接,操作系统收到的来自tcp连接的每一个字节,我们都会
让应用程序收到,如果应用程序收不到,就会rst
4) 在一个已经关闭的socket上收到数据
如果某个socket已经关闭,还收到数据,会产生RST



0 0
原创粉丝点击