欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


在Linux服务器上做备份时需要考虑的细节
会声会影x5素材去哪下载
linux系统下如何修改服务器名称参考方法
Ubuntu 用VSFTP搭建FTP服务器设置教程
Linux系统SCSI磁盘扫描机制解析及命令详细介绍
Linux下的AWK入门教程
CentOS自动化安装实战
Linux系统中的内存清理和释放命令归纳
ubuntu 命令行中文乱码问题的解决方法
Ubuntu下VirtualBox的vdi文件克隆方法
Linux下抓包工具tcpdump使用介绍
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

   在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。

  匹配ether广播包。ether广播包的特征是mac全1.故如下即可匹配:

  tcpdump 'ether dst ff:ff:ff:ff:ff:ff'

  ylin@ylin:~$ sudo tcpdump -c 1 'ether dst ff:ff:ff:ff:ff:ff'

  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

  listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

  10:47:57.784099 arp who-has 192.168.240.77 tell 192.168.240.189

  在此,只匹配1个包就退出了。第一个是arp请求包,arp请求包的是采用广播的方式发送的,被匹配那是当之无愧的。

  匹配ether组播包,ether的组播包的特征是mac的最高位为1,其它位用来表示组播组编号,如果你想匹配其的多播组,知道它的组MAC地址即可。如

  tcpdump 'ether dst ' Mac_Address表示地址,填上适当的即可。如果想匹配所有的ether多播数据包,那么暂时请放下,下面会继续为你讲解更高级的应用。

  (2)匹配arp包

  arp包用于IP到Mac址转换的一种协议,包括arp请求和arp答应两种报文,arp请求报文是ether广播方式发送出去的,也即 arp请求报文的mac地址是全1,因此用ether dst FF;FF;FF;FF;FF;FF可以匹配arp请求报文,但不能匹配答应报文。因此要匹配arp的通信过程,则只有使用arp来指定协议。

  tcpdump 'arp' 即可匹配网络上arp报文。

  ylin@ylin:~$ arping -c 4 192.168.240.1>/dev/null& sudo tcpdump -p 'arp'

  [1] 9293

  WARNING: interface is ignored: Operation not permitted

  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

  listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

  11:09:25.042479 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local

  11:09:25.042702 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)

  11:09:26.050452 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local

  11:09:26.050765 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)

  11:09:27.058459 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local

  11:09:27.058701 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)

  11:09:33.646514 arp who-has ylin.local tell 192.168.240.1

  11:09:33.646532 arp reply ylin.local is-at 00:19:21:1d:75:e6 (oui Unknown)

  本例中使用arping -c 4 192.168.240.1产生arp请求和接收答应报文,而tcpdump -p 'arp'匹配出来了。此处-p选项是使网络工作于正常模式(非混杂模式),这样是方便查看匹配结果。

  (3)匹配IP包

  众所周知,IP协议是TCP/IP协议中最重要的协议之一,正是因为它才能把Internet互联起来,它可谓功不可没,下面分析匹配IP包的表达式。

  对IP进行匹配

  tcpdump 'ip src 192.168.240.69'

  ylin@ylin:~$ sudo tcpdump -c 3 'ip src 192.168.240.69'

  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

  listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

  11:20:00.973605 IP ylin.local.51486 > walnut.crossbeamsys.com.ssh: S 2706301341:2706301341(0) win 5840

  11:20:00.974328 IP ylin.local.32849 > 192.168.200.150.domain: 5858+ PTR? 20.200.168.192.in-addr.arpa. (45)

  11:20:01.243490 IP ylin.local.51486 > walnut.crossbeamsys.com.ssh: . ack 2762262674 win 183

  IP广播组播数据包匹配:只需指明广播或组播地址即可

  tcpdump 'ip dst 240.168.240.255'

  ylin@ylin:~$ sudo tcpdump 'ip dst 192.168.240.255'

  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

  listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

  11:25:29.690658 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 1, length 64

  11:25:30.694989 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 2, length 64

  11:25:31.697954 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 3, length 64

  11:25:32.697970 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 4, length 64

  11:25:33.697970 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 5, length 64

  11:25:34.697982 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 6, length 64

  此处匹配的是ICMP的广播包,要产生此包,只需要同一个局域网的另一台主机运行ping -b 192.168.240.255即可,当然还可产生组播包,由于没有适合的软件进行模拟产生,在此不举例子。

  (4)匹配TCP数据包

  TCP同样是TCP/IP协议栈里面最为重要的协议之一,它提供了端到端的可靠数据流,同时很多应用层协议都是把TCP作为底层的通信协议,因为TCP的匹配是非常重要的。

  如果想匹配HTTP的通信数据,那只需指定匹配端口为80的条件即可

  tcpdump 'tcp dst port 80'

  ylin@ylin:~$ wget http://www.baidu.com 2>1 1 >/dev/null & sudo tcpdump -c 5 'tcp port 80'

  [1] 10762

  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

  listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

  12:02:47.549056 IP xd-22-43-a8.bta.net.cn.www > ylin.local.47945: S 1202130469:1202130469(0) ack 1132882351 win 2896

  12:02:47.549085 IP ylin.local.47945 > xd-22-43-a8.bta.net.cn.www: . ack 1 win 183

  12:02:47.549226 IP ylin.local.47945 > xd-22-43-a8.bta.net.cn.www: P 1:102(101) ack 1 win 183

  12:02:47.688978 IP xd-22-43-a8.bta.net.cn.www > ylin.local.47945: . ack 102 win 698

  12:02:47.693897 IP xd-22-43-a8.bta.net.cn.www > ylin.local.47945: . 1:1409(1408) ack 102 win 724

  (5)匹配udp数据包

  udp是一种无连接的非可靠的用户数据报,因此udp的主要特征同样是端口,用如下方法可以匹配某一端口

  tcpdump 'upd port 53' 查看DNS的数据包

  ylin@ylin:~$ ping -c 1 www.baidu.com > /dev/null& sudo tcpdump -p udp port 53

  [1] 11424

  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

  listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

  12:28:09.221950 IP ylin.local.32853 > 192.168.200.150.domain: 63228+ PTR? 43.22.108.202.in-addr.arpa. (44)

  12:28:09.222607 IP ylin.local.32854 > 192.168.200.150.domain: 5114+ PTR? 150.200.168.192.in-addr.arpa. (46)

  12:28:09.487017 IP 192.168.200.150.domain > ylin.local.32853: 63228 1/0/0 (80)

  12:28:09.487232 IP 192.168.200.150.domain > ylin.local.32854: 5114 NXDomain* 0/1/0 (140)

  12:28:14.488054 IP ylin.local.32854 > 192.168.200.150.domain: 60693+ PTR? 69.240.168.192.in-addr.arpa. (45)

  12:28:14.755072 IP 192.168.200.150.domain > ylin.local.32854: 60693 NXDomain 0/1/0 (122)

  使用ping www.baidu.com目标是产生DNS请求和答应,53是DNS的端口号。

  此外还有很多qualitifer是还没有提及的,下面是其它合法的primitive,在tcpdump中是可以直接使用的。

  gateway host

  匹配使用host作为网关的数据包,即数据报中mac地址(源或目的)为host,但IP报的源和目的地址不是host的数据包。

  dst net net

  src net net

  net net

  net net mask netmask

  net net/len

  匹配IPv4/v6地址为net网络的数据报。

  其中net可以为192.168.0.0或192.168这两种形式。如net 192.168 或net 192.168.0.0

  net net mask netmask仅对IPv4数据包有效,如net 192.168.0.0 mask 255.255.0.0

  net net/len同样只对IPv4数据包有效,如net 192.168.0.0/16

  dst portrange port1-port2

  src portrange port1-port2

  portrange port1-port2

  匹配端口在port1-port2范围内的ip/tcp,ip/upd,ip6/tcp和ip6/udp数据包。dst, src分别指明源或目的。没有则表示src or dst

  less length 匹配长度少于等于length的报文。

  greater length 匹配长度大于等于length的报文。

  ip protochain protocol 匹配ip报文中protocol字段值为protocol的报文

  ip6 protochain protocol 匹配ipv6报文中protocol字段值为protocol的报文

  如tcpdump 'ip protochain 6 匹配ipv4网络中的TCP报文,与tcpdump 'ip && tcp'用法一样,这里的&&连接两个primitive。6是TCP协议在IP报文中的编号。

  ether broadcast

  匹配以太网广播报文

  ether multicast

  匹配以太网多播报文

  ip broadcast

  匹配IPv4的广播报文。也即IP地址中主机号为全0或全1的IPv4报文。

  ip multicast

  匹配IPv4多播报文,也就是IP地址为多播地址的报文。

  ip6 multicast

  匹配IPv6多播报文,即IP地址为多播地址的报文。

  vlan vlan_id

  匹配为vlan报文 ,且vlan号为vlan_id的报文

  到些为此,我们一直在介绍primitive是如何使用的,也即expression只有一个primitive。通过学会写好每个primtive,我们就很容易把多个primitive组成一个expression,方法很简单,通过逻辑运算符连接起来就可以了,逻辑运算符有以下三个:

  “&&” 或”and”

  “||” 或“or”

  “!” 或“not”

  并且可通过()进行复杂的连接运算。

  如tcpdump ‘ip && tcp’

  tcpdump ‘ host 192.168.240.3 &&( tcp port 80 || tcp port 443)’

  通过上面的各种primitive,我们可以写出很丰富的条件,如ip, tcp, udp,vlan等等。如IP,可以按址址进行匹,tcp/udp可以按端口匹配。但是,如果我想匹配更细的条件呢?如tcp中只含syn标志,fin标志的报文呢?上面的primitive恐怕无能为力了。不用怕,tcpdump为你提供最后一个功能最强大的primitive,记住是primitive,而不是expression。你可以用多个这个的primitive组成更复杂的 expression.

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站