tcpdump与Wireshark抓包
通俗的说,tcpdump是一个抓包工具,用于抓取互联网上传输的数据包。
形象的说,tcpdump就好比是国家海关,驻扎在出入境的咽喉要道,凡是要入境和出境的集装箱,海关人员总要打开箱子,看看里面都装了点啥。
学术的说,tcpdump是一种嗅探器(sniffer),利用以太网的特性,通过将网卡适配器(NIC)置于混杂模式(promiscuous)来获取传输在网络中的信息包。
要用tcpdump抓包,请记住,一定要切换到root账户下,因为只有root才有权限将网卡变更为“混杂模式”
命令实践
1、 直接启动tcpdump,将抓取所有经过第一个网络接口上的数据包
2、 指定网卡
- tcpdump默认选择第一块网卡(一般是eth0)进行抓包,我们可以使用-i(interface)参数指定通过哪一个网卡抓包,比如下面为抓取所有经过eth1网络接口上的数据包
- tcpdump –i eth1
如果想知道我们可以通过哪几个网卡抓包,可以使用-D参数,如:
- lo是回环接口
- any : 通过任意一块网卡进行抓包
3、抓取所有经过ens33,目标或者源地址是192.168.0.11
- tcpdump -i ens33 host 192.168.0.11
4、抓取主机10.37.63.255和主机10.37.63.61或10.37.63.95的通信:
5、抓取主机192.168.13.210除了和主机10.37.63.61之外所有主机通信的数据包:
6、抓取主机10.37.63.255除了和主机10.37.63.61之外所有主机通信的ip包
其他选项
# tcpdump -i ens33 -nn -X 'port 10727' -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
16:42:07.840634 IP 192.168.0.11.10727 > 128.199.176.14.443: Flags [.], ack 3848341625, win 1026, options [nop,nop,sack 1 {
1453:5809}], length 0
0x0000: 4500 0034 0ede 4000 8006 fa5c c0a8 000b E..4..@....\....
0x0010: 80c7 b00e 29e7 01bb 7492 4982 e561 0879 ....)...t.I..a.y
0x0020: 8010 0402 b48e 0000 0101 050a e561 0e25 .............a.%
0x0030: e561 1f29 .a.)
1 packet captured
6 packets received by filter
0 packets dropped by kernel
- -nn选项: 当tcpdump遇到协议号或者端口号时,不要将这些号码转换成对应的协议名称或者端口名称。比如,众所周知21端口是FTP端口,我们希望显示21,而非tcpdump自作聪明的将它显示成FTP
- -X: 告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
- ‘port 10727’: 这是告诉tcpdump不要看到啥就显示啥。我们只关心源端口或目的端口是10727的数据包,其他的数据包别给我显示出来
- -c选项:是Count的含义,这设置了我们希望tcpdump帮我们抓几个包。我设置的是1,所以tcpdump不会帮我再多抓哪怕一个包回来。
【-e选项】- 增加以太网帧头部信息输出
- OUI,即Organizationally unique identifier,是“组织唯一标识符”,在任何一块网卡(NIC)中烧录的6字节MAC地址中,前3个字节体现了OUI,其表明了NIC的制造组织。通常情况下,该标识符是唯一的。
【-l选项】- 使得输出变为行缓冲 - 默认是全缓冲的,-I可以将tcpdump的输出变为“行缓冲”方式
需求: “对于tcpdump输出的内容,提取每一行的第一个域,即”时间域”,并输出出来,为后续统计所用” ——>
# tcpdump -i ens33 -l |awk '{print $1}'
-—-> 如果不加-l选项,那么只有全缓冲区满,才会输出一次,这样不仅会导致输出是间隔不顺畅的,而且当你ctrl-c时,很可能会断到一行的半截,损坏统计数据的完整性。
【-t选项】- 输出时不打印时间戳tcpdump -i eth0 -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
01:52:10.433391 ARP, Request who-has 116.255.247.61 tell 116.255.247.125, length 64tcpdump -i eth0 -c 1 -t
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
ARP, Request who-has 116.255.245.35 tell 116.255.245.62, length 64tcpdump -w google.cap : 将抓包结果存放在google.cap文件中,结束以后可以用Wireshark打开查看
tcpdump -i ens33 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
15:37:42.628409 IP 192.168.0.212.22 > 192.168.0.11.6665: Flags [P.], seq 2262547790:2262548318, ack 983050816, win 239, length 528
<==按下 [ctrl]-c 之之后結束
6680 packets captured <==捉下來的封包数量
14250 packets received by filter <==由过滤所得的總封包數量
7512 packets dropped by kernel <==被核心所丢弃的封包15:37:42.628409: 封包被抓取的时间: 时:分:秒
- IP : IP协议
- 192.168.0.212.22 > 192.168.0.11.6665: 发送方的ip是192.168.0.212,端口是22;接收方的ip是192.168.0.11,端口是6665
只取出 port 22的包
tcpdump -i ens33 -nn port 22
15:42:35.407981 IP 192.168.0.11.6665 > 192.168.0.212.22: Flags [.], ack 34000, win 8209, length 0
15:42:35.409271 IP 192.168.0.212.22 > 192.168.0.11.6665: Flags [P.], seq 34000:34048, ack 6225, win 239, length 48
15:42:35.409292 IP 192.168.0.212.22 > 192.168.0.11.6665: Flags [P.], seq 34048:34080, ack 6225, win 239, length 32
15:42:35.409310 IP 192.168.0.11.6665 > 192.168.0.212.22: Flags [.], ack 34080, win 8208, length 0
http://roclinux.cn/?p=2481
还没有评论,来说两句吧...