tcpdump抓包常见用法

tcpdump抓包常见用法

2023年7月3日发(作者:)

tcpdump抓包常见⽤法常⽤选项-a —— 将⽹络地址和⼴播地址转变成名字

-d —— 将匹配信息包的代码以⼈们能够理解的汇编格式给出

-dd —— 将匹配信息包的代码以c语⾔程序段的格式给出

-ddd —— 将匹配信息包的代码以⼗进制的形式给出

-e —— 在输出⾏打印出数据链路层的头部信息

-f —— 将外部的Internet地址以数字的形式打印出来

-l —— 使标准输出变为缓冲⾏形式

-n —— 不把⽹络地址转换成名字

-t —— 在输出的每⼀⾏不打印时间戳

-v —— 输出⼀个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息

-vv —— 输出详细的报⽂信息

-c —— 在收到指定的包的数⽬后,tcpdump就会停⽌

-F —— 从指定的⽂件中读取表达式,忽略其它的表达式

-i —— 指定监听的⽹络接⼝

-r —— 从指定的⽂件中读取包(这些包⼀般通过-w选项产⽣)

-w —— 直接将包写⼊⽂件中,并不分析和打印出来

-T —— 将监听到的包直接解释为指定的类型的报⽂,常见的类型有rpc (远程过程调⽤)和snmp(简单⽹络管理协议)使⽤默认启动tcpdump普通情况下,直接启动tcpdump将监视第⼀个⽹络接⼝上所有流过的数据包。监视指定⽹络接⼝的数据包tcpdump -i eth1如果不指定⽹卡,默认tcpdump只会监视第⼀个⽹络接⼝,⼀般是eth0,下⾯的例⼦都没有指定⽹络接⼝。 监视指定主机的数据包打印所有进⼊或离开sundown的数据包.tcpdump host sundown也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包tcpdump host 210.27.48.1

打印helios 与 hot 或者与 ace 之间通信的数据包tcpdump host helios and ( hot or ace )截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )

打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.tcpdump ip host ace and not helios如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使⽤命令:tcpdump ip host 210.27.48.1 and ! 210.27.48.2截获主机hostname发送的所有数据tcpdump -i eth0 src host hostname监视所有送到主机hostname的数据包tcpdump -i eth0 dst host hostname监视指定主机和端⼝的数据包如果想要获取主机210.27.48.1接收或发出的telnet包,使⽤如下命令tcpdump tcp port 23 and host 210.27.48.1对本机的udp 123 端⼝进⾏监视 123 为ntp的服务端⼝tcpdump udp port 123

监视指定⽹络的数据包打印本地主机与Berkeley⽹络上的主机之间的所有通信数据包(nt: ucb-ether, 此处可理解为’Berkeley⽹络’的⽹络地址,此表达式最原始的含义可表达为: 打印⽹络地址为ucb-ether的所有数据包)tcpdump net ucb-ether打印所有通过⽹关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防⽌shell对其中的括号进⾏错误解析)tcpdump 'gateway snup and (port ftp or ftp-data)'打印所有源地址或⽬标地址是本地主机的IP数据包(如果本地⽹络通过⽹关连到了另⼀⽹络, 则另⼀⽹络并不能算作本地⽹络.(nt: 此句翻译曲折,需补充).localnet 实际使⽤时要真正替换成本地⽹络的名字)tcpdump ip and not net localnet监视指定协议的数据包打印TCP会话中的的开始和结束数据包, 并且数据包的源或⽬的不是本地⽹络上的主机.(nt: localnet, 实际使⽤时要真正替换成本地⽹络的名字))tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'打印所有源或⽬的端⼝是80, ⽹络层协议为IPv4, 并且含有数据,⽽不是SYN,FIN以及ACK-only等不含数据的数据包.(ipv6的版本的表达式可做练习)tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'(nt: 可理解为, ip[2:2]表⽰整个ip数据包的长度, (ip[0]&0xf)<<2)表⽰ip数据包包头的长度(ip[0]&0xf代表包中的IHL域, ⽽此域的单位为32bit, 要换算成字节数需要乘以4, 即左移2. (tcp[12]&0xf0)>>4 表⽰tcp头的长度, 此域的单位也是32bit, 换算成⽐特数为 ((tcp[12]&0xf0) >> 4) << 2, 即 ((tcp[12]&0xf0)>>2). ((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2))!= 0 表⽰: 整个ip数据包的长度减去ip头的长度,再减去tcp头的长度不为0, 这就意味着, ip数据包中确实是有数据.对于ipv6版本只需考虑ipv6头中的’Payload Length’ 与 ‘tcp头的长度’的差值, 并且其中表达⽅式’ip[]’需换成’ip6[]’.)打印长度超过576字节, 并且⽹关地址是snup的IP数据包tcpdump 'gateway snup and ip[2:2] > 576'打印所有IP层⼴播或多播的数据包, 但不是物理以太⽹层的⼴播或多播数据报tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'打印除’echo request’或者’echo reply’类型以外的ICMP数据包( ⽐如,需要打印所有⾮ping 程序产⽣的数据包时可⽤到此表达式 .

(nt: ‘echo reuqest’ 与 ‘echo reply’ 这两种类型的ICMP数据包通常由ping程序产⽣))tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'tcpdump 与wiresharkWireshark(以前是ethereal)是Windows下⾮常简单易⽤的抓包⼯具。但在Linux下很难找到⼀个好⽤的图形化抓包⼯具。

还好有Tcpdump。我们可以⽤Tcpdump + Wireshark 的完美组合实现:在 Linux ⾥抓包,然后在Windows ⾥分析包。tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第⼀个参数的位置,⽤来过滤数据报的类型

(2)-i eth1 : 只抓经过接⼝eth1的包

(3)-t : 不显⽰时间戳

(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包

(5)-c 100 : 只抓取100个数据包

(6)dst port ! 22 : 不抓取⽬标端⼝是22的数据包

(7)src net 192.168.1.0/24 : 数据包的源⽹络地址为192.168.1.0/24

(8)-w ./ : 保存成cap⽂件,⽅便⽤ethereal(即wireshark)分析使⽤tcpdump抓取HTTP包tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x48540x4745 为”GET”前两个字母”GE”,0x4854 为”HTTP”前两个字母”HT”。tcpdump 对截获的数据并没有进⾏彻底解码,数据包内的⼤部分内容是使⽤⼗六进制的形式直接打印输出的。显然这不利于分析⽹络故障,通常的解决办法是先使⽤带-w参数的tcpdump 截获数据并保存到⽂件中,然后再使⽤其他程序(如Wireshark)进⾏解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688341037a123332.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信