tcpdump

NIDS

网络嗅探器
linux: tcpdump,wireshark
windows: sniffer

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

#tcpdump -i eth0 -nn

tcpdump [ -eflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
          [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
          [ -T 类型 ] [ -w 文件名 ] [表达式 ]
   -e    在输出行打印出数据链路层的头部信息包括源mac和目的mac,以及网络层的协议;
   -f    将外部的Internet地址以数字的形式打印出来;
   -l    使标准输出变为缓冲行形式;
   -n    不把网络地址转换成名字;
-nn 不把ip和port转换成名字 一个n不要ip解析到域名,一个n不要port解析到协议 (有些时候解析会很慢)
   -t    在输出的每一行不打印时间戳;
   -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
   -vv    输出详细的报文信息;
   -c    在收到指定的包的数目后,tcpdump就会停止;
   -F    从指定的文件中读取表达式,忽略其它的表达式;
   -i     指定监听的网络接口;
   -w    直接将包写入文件中,并不分析和打印出来;
   -r    从指定的文件中读取包(这些包一般通过-w选项产生);   
   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程
调用)和snmp(简单网络管理协议);
-S 指定打印每个监听到的数据包的TCP绝对序列号而非相对序列号
-s 从每个报文中截取snaplen字节的数据,而不是缺省的68(如果是SunOS的NIT,最小值是96).68个字节适用于IP,ICMP,TCP和UDP,但是有可能截掉名字服务器和NFS报文的协议信息 ,采用更大的捕捉范围既增加了处理报文的时间,又相应的减少了报文的缓冲数量,可能导致报文的丢失.你应该把snaplen设的尽量小,只要能够容纳你需要的协议信息就可以了.
# tcpdump -i br1 -s 60 指定抓60个字节长度,结果如下
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br1, link-type EN10MB (Ethernet), capture size 60 bytes

三种逻辑运算
取非运算 ‘not ’ ‘! ’
与运算 ‘and’,’&&’
或运算 ‘or’ ,’||’
#tcpdump ‘port 80 and (host 192.168.1.10 or host 192.168.1.11)’
第一种类型关键字 包括host ,net,port 定义捕获数据包的范围
如:截获192.168.116.100 主机通信所有数据包
# tcpdump host 192.168.116.100

如:截获192.168.116.0/24该网络内数据包
    # tcpdump net 192.168.116.0/24

如:截获主机192.168.116.100 和 192.168.116.1 或者和 192.168.116.150通信的数据包 注意'()' 转译括号
    # tcpdump -nn host 192.168.116.100 and '(192.168.116.1 or 192.168.116.150)'

如 : 截获主机192.168.116.100和 除了192.168.116.1通信的数据
    # tcpdump -nn host 192.168.116.100 and ! 192.168.116.1

如: 截获192.168.116.100主机80端口收到和发出的所有数据包
    #tcpdump host 192.168.116.100 and port 80

第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向 默认是src和dst

如:截获源ip为192.168.116.100 并且 目标ip为192.168.116. 150的数据包
    #tcpdump -nn src 192.168.116.100 and dst 192.168.116.150

如:截获源ip为192.168.116.100 源端口 80  并且 目标ip为192.168.116. 150 目标端口 22 的数据包
    #tcpdump -nn src 192.168.116.100 and src port 80 and dst 192.168.116.1 and dst port 22

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

截获主机192.168.116.100 端口22 并且是tcp协议的数据包
    #tcpdump -nn host 192.168.116.100 and port 22 and tcp

抓取网口eth0上192.168.116.250与除192.168.116.74外的其他主机之间的icmp报文
    #tcpdump -i eth0 -s 1400 -nn host 192.168.116.250 and ! 192.168.116.74 and icmp -e

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料

tcpdump -i eth0 -nn protocol(arp icmp tcp udp )
tcpdump -i eth0 -nn port(80 21 22 23 ) -nnv h
tcpdump -i eth0 -nn port 80
tcpdump -i eth0 -nnv
tcpdump -i eth0 -nn host 192.168.1.1
tcpdump -i eth0 -nn net 192.168.1.0/24
tcpdump -i eth0 -nn src|dst port|host|net
tcpdump -i eth0 -nnv src port 80 and src host 192.168.1.1
tcpdump -i eth0 -nnv src port 80 or src port 22
tcpdump -i eth0 -nnv not port 5900
tcpdump -i eth0 -nnv ‘host 192.168.1.1 and port 80’ or ‘host 192.168.1.2 and port 22’
抓取标记为指定标记的包:
octet 八位组
在传统的二进制数字概念中,1 byte(字节)=8 bit(位)。大多数因特网标准使用八位组(octet)这个术语而不是使用字节来表示8位的量。该术语起始于TCP/IP发展的早期,当时许多早期的工作是在诸如DEC-10这样的系统上进行的,然而这些系统的结构使用的字节(byte)长度不是8位(bit),因此出现了octet的单位,即准确定义 1 octet = 8 bit。

协议头中第一个八位组是从0开始的
查看tcpdump的man手册,实际上flags标记位在第13个八位组(octet),标记从右到左是0到7
# tcpdump "tcp[13] & 0x03 != 0"
该过滤器跳过TCP头的13个字节,提取flag字节。掩码0x03选择第一和第二比特位,即FIN和SYN位。如果其中一位不为0则报文被抓取。此命令会抓取TCP连接建立及关闭报文。
        0           7|                   15|           23|             31
       ----------------|----------------------|---------------|----------------
       | HL| rsvd  |C|E|U|A|P|R|S|F|        window size      |
       ----------------|----------------------|---------------|----------------
       |               |  13th octet     |               |               |

       Let’s have a closer look at octet no. 13:

                       |                      |
                       |----------------------|
                       |C|E|U|A|P|R|S|F|
                       |----------------------|
                       |7    5    3       0| 


# tcpdump "tcp[13] & 0x03 != 0"
该过滤器抓取TCP头排位13的八位组,提取flag字节。掩码0x03(换成2进制就是00000011)选择第一和第二比特位,即FIN和SYN位。如果其中一位不为0则报文被抓取。此命令会抓取TCP连接建立及关闭报文。
# tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0

# tcpdump -i lo  "ip[9] = 6"   查看IP头的9号八位组,协议值为6(tcp)   注:udp值17, 1表示为ICMP协议, 2表示为IGMP协议
# tcpdump -i lo  "icmp[0] = 8"     查看icmp头的0号八位组,8表示icmp-request 

关键字
gateway, broadcast,less,greater

打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析)
#tcpdump 'gateway snup and (port ftp or ftp-data)'
如果数据包的网关地址是host, 则与此对应的条件表达式为真. 需要注意的是, 这里的网关地址是指以太网地址, 而不是IP 地址( 例如, 可理解为'注意'.the Ethernet source or destination address, 以太网源和目标地址, 可理解为, 指代上句中的'网关地址' ).host 必须是名字而不是数字, 并且必须在机器的'主机名-ip地址'以及'主机名-以太地址'两大映射关系中有其条目(前一映射关系可通过/etc/hosts文件, DNS 或 NIS得到, 而后一映射关系可通过/etc/ethers 文件得到

less length
    如果数据包的长度比length 小或等于length, 则与此对应的条件表达式为真. 这与'len <= length' 的含义一致.

greater length
    如果数据包的长度比length 大或等于length, 则与此对应的条件表达式为真. 这与'len >= length' 的含义一致.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值