tcpdump使用总结

tcpdump是Linux下自带的网络分析工具。可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

tcpdump主要选项

  1. 类型

    host, net, port

  2. 方向

    src, dst, src or dst, src and dst

  3. 协议

    ip, tcp, udp, arp, rarp, ether, fddi

  4. 逻辑

    and, or, not 或者 &&, ||, !

  5. 选项

    -i指定网卡, -n显示ip, -A文本显示
    -c抓包数, -x/-xx/-X/-XX二进制显示, -r读, -w写

类型
host指定主机或目的地址。
net制定网络地址。net可以用来指定子网。
port指定监听端口。
如果要制定多种类型,用逻辑运算符号连接。
tcpdump net 192.168.1。监听子网192.168.1.0
tcpdump net 192.168.1.0/24
tcpdump host 192.168.1.124 and port 80。监听指定主机的80端口。

方向
src指定源地址,dst指定目的地址。
监听来自192.168.1.10 或 192.168.1.11的80端口:
tcpdump port 80 and (src 192.168.1.10 or src 192.168.1.11)

协议
用来捕获特定协议的数据包有:ether(ethernet), tcp, udp, icmp, ip, ip6(ipv6), arp, rarp(reverse arp)等。

逻辑
tcpdump port 80 and (host 192.168.1.10 or host 192.168.1.11)。监听主机192.168.1.10 或 192.168.1.11的80端口。
使用()一定要用\转义。
获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2

选项
-i:指定网卡。
-n:显示ip,而不是主机名。
-c:指定抓多少个包后退出。
-A:以ASCII方式显示包内容,这个选项对文本格式的协议包非常有用。
-s:指定抓包显示一行的宽度,-s0表示显示完整的包,经常和-A一起用。
-x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册。
-vv:详细信息。
-r:从文件中读取。
-w:导出到指定文件。
监听来自172.25.38.145到端口7012的数据,并到处到指定文件:
tcpdump tcp dst port 7012 and src host 172.25.38.145 -vv ?w output.dat
从指定文件加载监听数据:
tcpdump -r output.dat
监听网卡eth1端口7012的数据:
tcpdump tcp port 7012 -ieth1 ?n

用tcpdump解析tcp连接建立和释放
下面命令抓包:
tcpdump tcp port 7012 and host 172.25.34.88 -ieth1 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes

1.
14:44:52.174122 IP 172.25.38.145.49563 > 172.25.34.88.7012: S 1986599379:1986599379(0) win 5840 <mss 1460,sackOK,timestamp 3824018401 0,nop,wscale 2>

2.
14:44:52.174249 IP 172.25.34.88.7012 > 172.25.38.145.49563: S 4294961892:4294961892(0) ack 1986599380 win 5792 <mss 1460,sackOK,timestamp 1927787323 3824018401,nop,wscale 2>

3.
14:44:52.174228 IP 172.25.38.145.49563 > 172.25.34.88.7012: . ack 1 win 1460 <nop,nop,timestamp 3824018401 1927787323>

4.
14:44:52.174433 IP 172.25.38.145.49563 > 172.25.34.88.7012: P 1:109(108) ack 1 win 1460 <nop,nop,timestamp 3824018401 1927787323>

5.
14:44:52.174443 IP 172.25.34.88.7012 > 172.25.38.145.49563: . ack 109 win 1448 <nop,nop,timestamp 1927787323 3824018401>

6.
14:44:52.186891 IP 172.25.34.88.7012 > 172.25.38.145.49563: P 1:857(856) ack 109 win 1448 <nop,nop,timestamp 1927787326 3824018401>

7.
14:44:52.186914 IP 172.25.34.88.7012 > 172.25.38.145.49563: F 857:857(0) ack 109 win 1448 <nop,nop,timestamp 1927787326 3824018401>

8.
14:44:52.187054 IP 172.25.38.145.49563 > 172.25.34.88.7012: . ack 857 win 1888 <nop,nop,timestamp 3824018404 1927787326>

9.
14:44:52.195347 IP 172.25.38.145.49563 > 172.25.34.88.7012: F 109:109(0) ack 858 win 1888 <nop,nop,timestamp 3824018406 1927787326>

10.
14:44:52.195355 IP 172.25.34.88.7012 > 172.25.38.145.49563: . ack 110 win 1448 <nop,nop,timestamp 1927787328 3824018406>

每一行中间都有这个包所携带的标志:
S=SYN,发起连接标志。
P=PUSH,传送数据标志。
F=FIN,关闭连接标志。
ack
表示确认包。
RST=RESET,异常关闭连接。
. 表示没有任何标志。

上面抓包的过程解析:
第1行:14:44:52这个时间,从172.25.38.145(client)的临时端口49563向172.25.34.88(server)的7012监听端口发起连接,client初始包序号为1986599379,滑动窗口大小为5840字节(滑动窗口即tcp接收缓冲区的大小,用于tcp拥塞控制),mss大小为1460(即可接收的最大包长度,通常为MTU减40字节,IP头和TCP头各20字节)。
第2行:server响应连接,同时带上第一个包的ack信息,为client端的初始包序号加1,即1986599380,即server端下次等待接受这个包序号的包,用于tcp字节流的顺序控制。Server端的初始包序号为4294961892,mss也是1460。
第3行:client再次确认,tcp连接三次握手完成。
第4行:client发请求包,包长度108字节。
第5行:server响应ack。
第6行:server回包,包长度856字节。
第7行:client响应ack。
第8行:client发起关闭连接请求。
第9行:server响应ack,并且也发送FIN标志关闭。
第10行:客户端响应ack,关闭连接的四次握手完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值