1 strace
2 tcpdump
3 netstat
4 ifconfig
5 iptraf
6 iftop
7 sar
8 wireshark
strace -p 28182 -s4086 -T -f [-e trace=network/process/signal]
用TCPDUMP捕获的TCP包的一般输出信息是:
src > dst: flags data-seqno ack window urgent options length
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项. Length是长度
UDP包的输出信息
route.port1 > ice.port2: udp lenth
从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth。
常见的参数
-i指定需要抓包的网卡
-nnn 禁用tcpdump展示时把IP、端口等转换为域名、端口对应的知名服务名称
-s指定抓包的包大小。使用-s 0指定数据包大小为262144字节
-c指定抓包的数量
-w参数指定抓包文件保存到文件
-X 不包括数据链路层的报文,并且以ASCⅡ的编码方式(tcpdump会以16进制和ASCII的形式显示)
-A 以ASCⅡ编码打印除了链路层报文头外的报文内容
-d 将匹配信息包的代码以人们能够理解的汇编格式给出
-dd 将匹配信息包的代码以c语言程序段的格式给出
-ddd 将匹配信息包的代码以十进制的形式给出
tcpdump tcp -i eth1 -t -s 0 -c 100 -X and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
tcpdump -iany -s0 port 80 -A
[实例排查:测试高防IP的联通新]
- 我们有外网机器A: 49.51.39.154
- 让用户在服务端抓包:tcpdump -iany -s0 src host 49.51.39.154 -A
- 我们在机器A执行:telnet xxx.gsadds.com xxx
- 客户机器如果能够显示我们的请求数据,说明联通ok:
root@VM_127_231_centos ~]# tcpdump -iany -s0 src host 49.51.39.154 -A
tcpdump: verbose output suppressed,
use
-v or
-vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:44:42.851203 IP 49.51.39.154.53440
> VM_127_231_centos.21150:
Flags
[P.], seq 2707990323:2707990332, ack 193352084, win 229, options [nop,nop,TS val 855746637 ecr 2046056509], length 9
Eh.=.'@.8...13'.
.....R..h.3..Q.....Y......
3..My.X=lippman
................
过滤器规则
host a.b.c.d 指定仅抓取本机和某主机a.b.c.d的数据通信
tcp port x:指定仅抓取TCP协议目的端口或者源端口为x的数据通信
icmp:指定仅抓取ICMP协议的数据通信。
!:反向匹配,例如port ! 22,抓取非22端口的数据通信。
可以使用and或者or进行组合
Netstat -apn
netstat -i
1.[Packet size limited during capture]
被标记的那个包没有抓全, 这种情况一般是由抓包方式引起的,如tcpdump 的-s指定长度过小
2.[TCP Previous segment not captured
在TCP传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq+Len(三次握手和四次挥手是例外)。如果Wireshark发现后一个包的Seq号大于前一个包的Seq+Len,就知道中间缺失了一段数据。网络包没被抓到还分两种情况:一种是真的丢了;另一种是实际上没有丢,但被抓包工具漏掉了。在Wireshark中如何区分这两种情况呢?只要看对方回复的确认(Ack)就行了。如果该确认包含了没抓到的那个包,那就是抓包工具漏掉而已,否则就是真的丢了
3.[TCP ACKed unseen segment]
当Wireshark发现被Ack的那个包没被抓到,就会提示
4.[TCP Out-of-Order]
在TCP传输过程中(不包括三次握手和四次挥手),同一台主机发出的数据包应该是连续的,即后一个包的Seq号等于前一个包的Seq+Len。也可以说,后一个包的Seq会大于或等于前一个包的Seq。当Wireshark发现后一个包的Seq号小于前一个包的Seq+Len时,就会认为是乱序了,因此提示 [TCP Out-of-Order] 。小跨度的乱序影响不大,比如原本顺序为1、2、3、4、5号包被打乱成2、1、3、4、5就没事。但跨度大的乱序却可能触发快速重传,比如打乱成2、3、4、5、1时,就会触发足够多的Dup ACK,从而导致1号包的重传。
5.[TCP Dup ACK]
当乱序或者丢包发生时,接收方会收到一些Seq号比期望值大的包。它每收到一个这种包就会Ack一次期望的Seq值,以此方式来提醒发送方,于是就产生了一些重复的Ack。Wireshark会在这种重复的Ack上标记[TCP Dup ACK] 。
6.[TCP Fast Retransmission]
当发送方收到3个或以上[TCP Dup ACK],就意识到之前发的包可能丢了,于是快速重传它(这是RFC的规定)
7.[TCP Retransmission]
如果一个包真的丢了,又没有后续包可以在接收方触发[Dup Ack],就不会快速重传。这种情况下发送方只好等到超时了再重传,此类重传包就会被Wireshark标上[TCP Retransmission]。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。