sudo tcpdump -help
tcpdump version 4.5.1
libpcap version 1.5.3
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ]
[ -P in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -V file ] [ -w file ]
[ -W filecount ] [ -y datalinktype ] [ -z command ]
[ -Z user ] [ expression ]
[-aAbdDefhHIJKlLnNOpqRStuUvxX]
[ -B size ]
[ -c count ]
[ -C file_size ]
[ -E algo:secret ]
[ -F file ]
[ -G seconds ]
[ -i interface ] 指定网卡 any表示任意网卡
[ -j tstamptype ]
[ -M secret ]
[ -P in|out|inout ]
[ -r file ]
[ -s snaplen ]
[ -T type ]
[ -V file ]
[ -w file ]
[ -W filecount ]
[ -y datalinktype ]
[ -z command ]
[ -Z user ]
[ expression ]
1. tcpdump host 10.10.10.1
获得所有有关10.10.10.1的数据包
2. tcpdump host 10.10.10.1 and \( 10.10.10.110 or 10.10.10.111)
获得所有.1与.110或.1与.111之间的数据包
3. tcpdump ip host 10.10.10.1 and not 10.10.10.110
打印所有与.1通信但不与.110通信的IP数据包
4. tcpdump -i eth0 src host 10.10.10.110
获得所有从.110发出的所有数据
5. tcpdump tcp port 80 and src host 10.10.10.110
获得所有从.110发出的向80端口的http请求包
6. tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) !=0 '
打印TCP会话中的的开始和结束数据包
7. tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) '
打印所有源或目的端口是80, 网络层协议为IPv4, 并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的数据包
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数据包中确实是有数据.
指定主机 host
指定协议 ip/tcp/udp/..
指定方向 src/dst
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总的的输出格式为:系统时间 来源主机.端口 > 目标主机.端口 数据包参数
tcpdump
最新推荐文章于 2024-10-16 12:14:16 发布