tcpdump抓包工具简单用法

tcpdump可以抓取什么数据包(默认每个包只抓68+28=96个字节的说法应该是错误的)

tcpdump直接从网络驱动层,抓取输入数据,不经过任何linux网络协议栈,iptables依赖netfilter模块,它工作在linux网络协议栈中.

#所以:
    tcpdump能抓取到被iptables在INPUT链上 DROP的数据
    tcpdump不能抓取被iptables在OUTPUT链上 DROP的数据

tcpdump 常用参数介绍

tcpdump -D     显示所有的网络接口(网卡)(可以用它先查看系统有哪些接口可以抓包)
 tcpdump -i eth0 指定抓取某个网卡的流量
 tcpdump -c 100 指定抓取数据包的数量,这里是100个数据包
 tcpdump -r file.cap 读取数据包
 tcpdump -s 0   抓取完整的数据包
 tcpdump -n     不进行域名解释,不要将IP地址和端口号进行转换,进行转换会耗费CPU时间(只以ip地址形式显示)
 tcpdump -t     在输出的每一行不打印时间戳
 tcpdump -e     在输出行打印出数据链路层的头部信息
 tcpdump -a     将网络地址和广播地址转变成名字
 tcpdump -v     输出稍详细的报文信息,-vv  输出更详细的报文信息
 tcpdump -w /var/log/shuju.log 将抓取的数据包保存为shuju.log,并不显示在终端上
 tcpdump  -G 60 指定间隔60秒,每隔60秒就保存一个文件,通常与-w  文件名中的时间变量一同使用,见下面的高级用法
                    %d  每月中的第几天,十进制数字从01到31。
                    %H  表示当前的小时时间,十进制数字从00到23。
                    %M  表示当前的分钟时间,十进制数字从00到59。
                    %S  表示当前的秒时间,十进制的00到60

 tcpdump udp            指定抓取udp协议的数据包
 tcpdump port 80        指定抓取80端口的数据包
 tcpdump src port 80    指定抓取源端口为80的数据包
 tcpdump dst port 80        指定抓取目的端口为80的数据包
 tcpdump portrange 1-1024       指定抓取的端口范围
 tcpdump host www.wsfnk.com 指定抓取包含主机为www.wsfnk.com的所有数据包
 tcpdump host 192.168.1.1       指定抓取包含主机为192.168.1.1的所有数据包
 tcpdump src host 192.168.1.1   抓取来自192.168.1.1的数据包
 tcpdump dst host 192.168.1.1   抓取去往192.168.1.1的数据包
 tcpdump greater 1000               指定抓取大于1000字节的数据包
 tcpdump less 15        指定抓取小于15字节的数据包
 tcpdump -A             指定以ascii码的形式显示数据包的内容
 tcpdump -X             以十六进制和ascii码两种形式显示包的内容

tcpdump在表达式中一般有如下几种类型的关键字

1、关于类型的关键字
    host(缺省类型): 指明一台主机,如:host 10.215.20.13
    net: 指定网络地址, net 10.215.20.0
    port: 指明端口号, port 3306

2、确定传输方向的关键字
    dst or src(缺省值)         指定源或者目标地址是 10.215.20.13 的流量包
    src: src 10.9.51.13,        指定源地址是 10.9.51.13
    dst: dst net 172.0.0.0,     指定目标网络地址是 172.0.0.0
    dst and src 比如: src host 10.9.51.13 and dst host 10.215.20.13

3、协议的关键字(缺省值是监听所有协议的信息包)
    ip
    arp
    rarp
    tcp
    udp
    icmp
    fddi

4、三种逻辑运算
    非 :     ! , not
    与 :     && , and
    或 :     || , or

5、其他关键字
    gateway
    broadcast
    less
    greater

例子:tcpdump 的逻辑组合及流量过滤
    与   tcpdump tcp and src host 192.168.1.1 and port 80
    或   tcpdump src host 192.168.1.1 or src host 192.168.1.2
    非   tcpdump tcp and src host 192.168.1.1 and not port 80

tcpdump 的常规用法

截获来自主机1.1.1.1的所有数据
    tcpdump -v -i eth0 src host 1.1.1.1

截获发往1.1.1.1的所有数据
    tcpdump -v -i eth0 dst host 1.1.1.1

抓取来自192.168.60.0/22网络的所有数据(注意这里的CIDR形式,注意一定要是网络地址,不能是广播地址,也不能是net中的其中一个主机地址,不然会报错的)
    tcpdump -v -i eth0 'src net 192.168.60.0/22'

抓取vlan 10的所有数据
    tcpdump -v -i eth0 vlan 10
    tcpdump -ei eth0 vlan 10
    tcpdump -ei eth0 | grep -i vlan

抓取pppoe的密码数据
    tcpdump -v -i eth0 pppoes

抓取arp协议的数据包
    tcpdump -v -i eth0  arp

抓取ospf协议的数据包(下面两个命令功能相同)(注意:抓tcp时不能写成ip proto tcp,应写成ip proto 6 )
    tcpdump -v -i eth0 ip proto ospf
    tcpdump -v -i eth0 ip proto 89

抓取端口范围的数据包(抓取21-23端口的所有数据包)
    tcpdump -i eth0 portrange 21-23

抓取以太网地址数据
    tcpdump ether host fa:26:3e:01:3c:40

抓取主机172.16.1.253访问服务器22端口的所有数据包
    tcpdump -v -i eth0 src host 172.16.1.253 and dst port 22

抓取源ip是172.16.1.122且端口不是22的数据包
    tcpdump -v -i eth0 src host 172.16.1.122 and not port 22

把抓取的数据包记录到123.cap文件中,当抓取1000个数据包后就退出程序。
    tcpdump -v –i eth0 -c 1000 -w 123.cap

读取数据包文件,匹配显示 tcp的22端口数据
    tcpdump  -r /root/123.cap tcp and port 22 -v

=========================
使用tcpdump抓取交换机连接的端口
有时候需要知道服务器连接到了哪个交换机的哪个端口。这是如果连接的交换机支持LLDP或CDP协议,并启用了该协议。那我们就可以用过tcpdump来抓取物理连接信息。
对于LLDP,协议号是0x88cc。于是我们可以使用以下tcpdump命令来抓取到我们想要的信息。
    tcpdump -i eth0 ether proto 0x88cc -A -s0 -t -c 1

对于使用CDP协议的交换机,一般是Cisco的交换机。可以使用下面命令。即把LLDP的协议号换成CDP的协议号0x2000
    tcpdump -i eth0 ether proto 0x2000 -A -s0 -t -c 1

tcpdump 的高级用法

使用tcpdump抓取HTTP报文(注意tcp[20:2] 其中2应该表示的是两个16进制位)
    tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
    #0x4745 这是十六进制表达式,0x表示十六进制,47=G,45=E,意思是GE
    #0x4854 这是十六进制表达式,0x表示十六进制,48=H,54=T,意思是HT
    #-XvvennSs 0    表示完全显示,就类似wireshark的三分栏

抓192.168.1.123的80端口和110和25以外的其他端口的包
    tcpdump -i eth1 host 192.168.1.123 and ! port 80 and ! port 25 and ! port 110

抓取主机1.1.1.1和所有主机(除20.20.20.8)的通信数据包
    tcpdump host 1.1.1.1 and !20.20.20.8

抓取主机1.1.1.1与192.168.1.5的通信,或则1.1.1.1与192.168.2.3的通信
    tcpdump host 1.1.1.1 and \(192.168.1.5 or 192.168.2.3 \)

抓取源ip是172.16.1.2且目的端口是22,或源ip是172.16.1.65且目的端口是80的数据包。
    tcpdump -v -i eth0 \( src host 172.16.1.2 and dst port 22 \) or   \( src host 172.16.1.65 and dst port 80 \)

抓取源ip是172.16.1.59且目的端口是22,或源ip是172.16.1.68且目的端口是80的数据包。(上面和这种写法建议写成这种)
    tcpdump -i  eth0 -v 'src host 172.16.1.59 and dst port 22' or  ' src host 172.16.1.68 and dst port 80 '

每隔60秒保存一次数据包文件,文件名是以年-月-日_时:分:秒.cap的形式进行命名的,一致持续抓包,持续保存数据包
    tcpdump  -G 60  -s 0 -i eth0 -w ip_%Y-%m-%d_%H:%M:%S.cap
    #-G 指定间隔60秒,与-w  文件名中的时间变量一同使用,就是隔60秒,保存一个文件

tcpdump如何分割pcap数据包
    tcpdump -r /root/123.cap -c 1000 -w out-123.cap
    #将123.cap前一千个数据包导出保存为新的 文件 out-123.cap(这个文件可以使用wireshark直接打开)

更多关于数据包分析过滤案例,请参考该文章:

linux如何对pcap数据包进行分割与合并、过滤与分析等操作

声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/270.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2022/12/13作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录