挖了一个tcpdump,哈哈哈

1、tcpdump简介

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

yum install -y tcpdump

2、tcpdump示例

1、默认启动
普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

tcpdump

2、监视指定网络接口的数据包

如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。 
tcpdump -i eth1

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个数据包退出。Exit after receiving count packets。
(6) dst port ! 22 : 不抓取目标端口是22的数据包。
(7) src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24。
(8) -w ./target.cap : 保存成cap文件,方便用wireshark分析。

1、抓取所有网络包,并在terminal中显示抓取的结果,将包以十六进制的形式显示。
tcpdump 
2、抓取所有的网络包,并存到 result.cap 文件中。
tcpdump -w result.cap
3、抓取所有的经过eth0网卡的网络包,并存到 result.cap 文件中。
tcpdump -i eth0 -w result.cap
4、抓取源地址是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump src host 192.168.1.100 -w result.cap 
5、抓取地址包含是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump host 192.168.1.100 -w result.cap 
6、抓取目的地址包含是192.168.1.100的包,并将结果保存到 result.cap 文件中。
tcpdump dest host 192.168.1.100 -w result.cap 
7、抓取主机地址为 192.168.1.100 的数据包
tcpdump -i eth0 -vnn host 192.168.1.100
8、抓取包含192.168.1.0/24网段的数据包
tcpdump -i eth0 -vnn net 192.168.1.0/24
9、抓取网卡eth0上所有包含端口22的数据包
tcpdump -i eth0 -vnn port 22
10、抓取指定协议格式的数据包,协议格式可以是「udp,icmp,arp,ip」中的任何一种,例如以下命令:
tcpdump udp  -i eth0 -vnn
11、抓取经过 eth0 网卡的源 ip192.168.1.100 数据包,src参数表示源。
tcpdump -i eth0 -vnn src host 192.168.1.100
12、抓取经过 eth0 网卡目的 ip192.168.1.100 数据包,dst参数表示目的。
 tcpdump -i eth0 -vnn dst host 192.168.1.100
13、抓取源端口是22的数据包
tcpdump -i eth0 -vnn src port 22
14、抓取源ip是 192.168.1.100 且目的ip端口是22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 and dst port 22
15、抓取源ip是192.168.1.100或者包含端口是22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 or port 22
16、抓取源ip是192.168.1.100且端口不是22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 and not port 22
17、抓取源ip是192.168.1.100且目的端口是22,或源ip是192.168.1.102且目的端口是80的数据包。
tcpdump -i eth0 -vnn ( src host 192.168.1.100 and dst port 22 ) or ( src host 192.168.1.102 and dst port 80 )
18、把抓取的数据包记录存到/tmp/result文件中,当抓取100个数据包后就退出程序。
tcpdump –i eth0 -vnn -w /tmp/result -c 100
19、从/tmp/result记录中读取tcp协议的数据包
tcpdump -i eth0  tcp  -vnn -r /tmp/result
20、想要截获所有192.168.1.100 的主机收到的和发出的所有的数据包:
tcpdump host 192.168.1.100
21、如果想要获取主机192.168.1.100除了和主机192.168.1.101之外所有主机通信的ip包,使用命令:
tcpdump ip host 192.168.1.100 and ! 192.168.1.101
22、如果想要获取主机 192.168.1.100 接收或发出的 telnet 包,使用如下命令:
tcpdump tcp port 23 host192.168.1.100

3、tcpdump文件不完整解决方案

在这里插入图片描述
要避免这种情况,就需要使用合理的方式正常结束tcpdump.

3.1、使用 Ctrl + c 给tcpdump发送终止信号

在这里插入图片描述

3.2、使用timeout命令正常终止tcpdump

在10秒钟之后,tcpdump就会正常退出。
timeout 10 tcpdump -i any -w test.cap 

猜你喜欢

转载自blog.csdn.net/Michael_lcf/article/details/131232883