百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> CentOS下怎样运用tcpdump网络抓包
分享文章到:

CentOS下怎样运用tcpdump网络抓包

发布时间:01/01 来源:未知 浏览: 关键词:
下面由centos教程栏目给大家介绍CentOS下使用tcpdump网络抓包的办法,但愿对需要的伴侣有所帮忙!

tcpdump是Linux下的截获剖析网络数据包的工具,对优化系统机能有很大参照 价值。

安置

tcpdump不是默许安置的,在CentOS下安置:

yum install tcpdump

在Ubuntu下安置:

apt-get install tcpdump
默许启动
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 与wireshark

Wireshark(之前是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 ./target.cap
(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 ./target.cap : 留存成cap文件,利便用ethereal(即wireshark)剖析

使用tcpdump抓取HTTP包

tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。

tcpdump 对截获的数据并没有停止彻底解码,数据包内的大部分内容是使用十六进制的情势直接打印输出的。明显这不利于剖析网络故障,平常的解决方法是先使用带-w参数的tcpdump 截获数据并留存到文件中,然后再使用其他程序(如Wireshark)停止解码剖析。当然也应当定义过滤规则,以幸免捕捉的数据包填满整个硬盘。

1、抓取回环网口的包:tcpdump -i lo

2、防止包截断:tcpdump -s0

3、以数字显示主机及端口:tcpdump -n

第一种是关于类型的关键字,主要包罗host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端标语是23。假如没有指定类型,缺省的类型是host.

第二种是肯定传输标的目的的关键字,主要包罗src , dst ,dst or src, dst and src ,这些关键字指明了传输的标的目的。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。假如没有指明标的目的关键字,则缺省是src or dst关键字。

第三种是和谈的关键字,主要包罗fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络和谈,实际上它是"ether"的别号,fddi和ether具有相似的源地址和目的地址,所以可以将fddi和谈包当作ether的包停止处置和 剖析。其他的几个关键字就是指明了监听的包的和谈内容。假如没有指定任何和谈,则tcpdump将会监听所有和谈的信息包。

除了这三品种型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&;或运算 是'or' ,'||';这些关键字可以组合起来构成强大的组合前提来知足人们的需要,下面举几个例子来说明。

一般状况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。

# tcpdump 
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
                       0000 0000 0080 0000 1007 cf08 0900 0000
                       0e80 0000 902b 4695 0980 8701 0014 0002
                       000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
                       ffff 0060 0004 ffff ffff ffff ffff ffff
                       0452 ffff ffff 0000 e85b 6d85 4008 0002
                       0640 4d41 5354 4552 5f57 4542 0000 0000
                       0000 00

使用-i参数指定tcpdump监听的网络界面,这在运算机具有多个网络界面时非常有用,
使用-c参数指定要监听的数据包数目,
使用-w参数指定将监听到的数据包写入文件中留存
A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:

#tcpdump host 210.27.48.1

B想要截获主机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 /)

C假如想要猎取主机210.27.48.1除了和主机210.27.48.2之外所有主机通讯的ip包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

D假如想要猎取主机210.27.48.1接收或发出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1

E 对本机的udp 123 端口停止监视 123 为ntp的效劳端口

# tcpdump udp port 123

F 系统将只对名为hostname的主机的通讯数据包停止监视。主机名可以是当地主机,也可以是网络上的任何一台运算机。下面的命令可以读取主机hostname发送的所有数据:

#tcpdump -i eth0 src host hostname

G 下面的命令可以监视所有送到主机hostname的数据包:

#tcpdump -i eth0 dst host hostname

H 我们还可以监视通过指定网关的数据包:

#tcpdump -i eth0 gateway Gatewayname

I 假如你还想监视编址到指定端口的TCP或UDP数据包,那么施行以下命令:

#tcpdump -i eth0 host hostname and port 80

J 假如想要猎取主机210.27.48.1除了和主机210.27.48.2之外所有主机通讯的ip包
,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

K 想要截获主机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 /)

L 假如想要猎取主机210.27.48.1除了和主机210.27.48.2之外所有主机通讯的ip包,使用命令:

#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

M 假如想要猎取主机210.27.48.1接收或发出的telnet包,使用如下命令:

#tcpdump tcp port 23 host 210.27.48.1

第三种是和谈的关键字,主要包罗fddi,ip ,arp,rarp,tcp,udp等类型
除了这三品种型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
r' ,'||';
第二种是肯定传输标的目的的关键字,主要包罗src , dst ,dst or src, dst and src ,
假如我们只需要列出送到80端口的数据包,用dst port;假如我们只但愿看到返回80端口的数据包,用src port。

#tcpdump –i eth0 host hostname and dst port 80  目的端口是80

或者

#tcpdump –i eth0 host hostname and src port 80  源端口是80  一样是供给http的效劳的主机

假如前提许多的话 要在前提此前加and 或 or 或 not

#tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80

假如在ethernet 使用混淆模式 系统的日志将会记载
May 7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.
May 7 20:03:46 localhost kernel: device eth0 entered promiscuous mode
May 7 20:03:57 localhost kernel: device eth0 left promiscuous mode
tcpdump对截获的数据并没有停止彻底解码,数据包内的大部分内容是使用十六进制的情势直接打印输出的。明显这不利于剖析网络故障,平常的解决方法是先使用带-w参数的tcpdump 截获数据并留存到文件中,然后再使用其他程序停止解码剖析。当然也应当定义过滤规则,以幸免捕捉的数据包填满整个硬盘。

# tcpdump   -i eth1 src  host 211.167.237.199
00:02:03.096713 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010208:2010352(144) ack 33377 win 8576
00:02:03.096951 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010352:2010496(144) ack 33377 win 8576
00:02:03.100928 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010496:2010640(144) ack 33377 win 8576
00:02:03.101165 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010640:2010784(144) ack 33377 win 8576
00:02:03.102554 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 2010784:2010928(144) ack 33425 win 8576

表白在00:02:03点的时候,211.167.237.199通过ssh源端口连接到221.216.165.189的1467端口

#tcpdump -i eth1 src host 211.167.237.199 and dst port 1467
00:09:27.603075 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 180400:180544(144) ack 2833 win 8576
00:09:27.605631 IP 211.167.237.199.ssh > 221.216.165.189.1467: P 180544:180688(144) ack 2881 win 8576

截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host),并且(and)目标(dst)端口(port)为80的数据包

不雅看网卡传送、接收数据包的状态

$ netstat  -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500  0  14639   0      0      0    5705    119    0     0   BMRU

Iface:  网卡
RX-OK RX-ERR RX-DRP RX-OVR : 网卡准确接收数据包的数目乃至发生错误、流失、碰撞的总数
TX-OK TX-ERR TX-DRP TX-OVR : 网卡准确发送数据包的数目乃至发生错误、流失、碰撞的总数

以上就是CentOS下怎样使用tcpdump网络抓包的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板