tcpdump可以将网络中传送的数据包的“头”完备截获下来供应剖析。它支持针对网络层、协议、主机、网络或端口的过滤,并供应and、or、not等逻辑语句来帮助你去掉无用的信息。
tcpdump基于底层libpcap库开拓,运行须要root权限。
sudoapt-getinstalltcpdump

3. 版本查看
tcpdump--h
tcpdump version 4.0。
libpcap version 1.1.1 表示libpcap的版本。
二、tcpdump参数常用参数选项解释:
三、命令选项利用举例
1. 截获主机收到和发出的所有数据包。命令:
tcpdump
解释:
tcpdump截取包默认显示数据包的头部。
普通情形下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
根本格式:韶光 数据包类型 源IP 端口/协议 > 目标IP 端口/协议 协议详细信息
按下Ctrl+C会终止tcpdump命令。且会在结尾处天生统计信息。
终止tcpdump
2. 指定抓包数量 -c指定抓取2个数据包。
命令:
tcpdump-c2
解释:
末了会自动天生统计信息。
【把稳,已经切换到管理员了,虚拟机中要产生数据包,可以其余开一个窗口ping baidu.com后面不再提示】
ping baidu.com
3. 将抓包信息写入文件 -w利用-w选项指定记录文件。
命令:
tcpdump-c10-wtcpdump_test.log
解释:
保存的文件不是文本格式,不能直接查看。tcpdump保存的文件的格式是险些所有主流的抓包工具软件都可以读取。以是可以利用更易读的图形界面临象来查看记录文件。
4. 读取记录文件 -r
利用-r选项读取文件。
命令:
tcpdump-rtcpdump_test.log
![读取记录文件
5. 打印出所有可事情的接口 -D
命令:
tcpdump-D
个中网卡为eth0。
6. 指定监控的网卡 -i命令:
tcpdump-ieth0
如果不指定网卡,默认tcpdump只会监视第一个网络接口,一样平常是eth0。
7. 显示更详细的数据包信息 -v -vv选项-v,-vv可以显示更详细的抓包信息。
tcpdump -v
tcpdump -vv
8. 不该用域名反解 -n利用-n后,tcpdump会直接显示IP地址,不会显示域名(与netstat命令相似)。
9. 增加抓包韶光戳 -tttt选项tcpdump的所有输出打印行中都会默认包含韶光戳信息;韶光戳信息的显示格式如下
hh:mm:ss.frac(nt:小时:分钟:秒.)
此韶光戳的精度与内核韶光精度同等, 反响的是内核第一次看到对应数据包的韶光;
而数据包从物理线路通报到内核的韶光, 以及内核花费在此包上的中断处理韶光都没有算进来;
利用-tttt选项,抓包结果中将包含抓包日期:
命令:
tcpdump-tttt
增加抓包韶光戳
四、条件过滤1. 过滤:指定须要抓取的协议tcpdump可以只抓某种协议的包,支持指定以下协议:「ip,ip6,arp,tcp,udp,wlan」等。
命令:
tcpdumpudptcpdumpicmptcpdumptcptcpdumparp
2. 过滤:指定协议的端口号
利用port参数,用于指定端口号。
命令:tcpdump tcp port 80
利用portrange参数,用于指定端口范围。
命令:tcpdump tcp portrange 1-1024
3. 过滤:指定源与目标src 表示源。
dst 表示目标。
命令:
tcpdump src port 8080
tcpdump dst port 80
4. 过滤:指定特定主机的包利用host指定须要监听的主机。
命令:
tcpdumphost192.168.1.113
把稳:若利用了host参数利用了打算机名或域名。例tcpdump host shi-pc ,则无法再利用-n选项。
5. 过滤:指天命据包大小利用greater(大于)与less(小于)可以指天命据包大小的范围。
「例:只抓取大于1000字节的数据包。」
命令:
tcpdumpgreater1000
「例:只抓取小于10字节的数据包。」
命令:
tcpdumpless10
五、 逻辑表达式
利用基本逻辑组合拼装出更风雅的过滤条件。
1. 逻辑与逻辑与关系,利用and。
命令:
tcpdumptcpandhost192.168.1.112tcpdumptcpandsrc192.168.1.112andport8080
2. 逻辑或
逻辑或关系,利用or。
命令:
tcpdumphost192.168.1.112or192.168.1.113
3. 逻辑非
逻辑非关系,利用not,也可以利用 ! 。
若利用 ! 必须与其后面的字符隔开一个空格。
例:当通过ssh协议远程利用tcpdump时,为了避免ssh的数据包的输出,以是一样平常须要禁止ssh数据包的输出。
命令:
tcpdumpnottcpport22tcpdump!tcpport22
4. 括号
括号须要利用在引号内,或转意利用。否则会报错。
例:抓取非22端口,且主机为192.168.1.112 和 192.168.1.113的TCP数据包。
命令:
tcpdumpnottcpport22andhost192.168.1.112or192.168.1.113tcpdump"nottcpport22andhost(192.168.1.112or192.168.1.113)"tcpdumpnottcpport22andhost"(192.168.1.112or192.168.1.113)"
六、其他实例1. 打印所有进入或离开sundown的数据包.
tcpdumphostsundown
2. 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdumphost210.27.48.1and\(210.27.48.2or210.27.48.3\)
3. 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,利用命令:
tcpdumpiphost210.27.48.1and!210.27.48.2
4. 监视所有送到主机hostname的数据包
tcpdump-ieth0dsthosthostname
5. 获取主机210.27.48.1吸收或发出的telnet包
23为telnet的端口
tcpdumptcpport23andhost210.27.48.1
6. 监视本机的udp 123 端口
123 为ntp的做事端口
tcpdumpudpport123
7. 利用tcpdump抓取HTTP包
tcpdump-XvvennSs0-ieth0tcp[20:2]=0x4745ortcp[20:2]=0x4854
0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。
tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是利用十六进制的形式直接打印输出的。
显然这不利于剖析网络故障,常日的办理办法是先利用带-w参数的tcpdump 截获数据并保存到文件中,然后再利用其他程序(如Wireshark)进行解码剖析。当然也该当定义过滤规则,以避免捕获的数据包填满全体硬盘。
六、查看数据包完全内容tcpdump默认不显示数据包的详细内容。
方法一:利用-A参数能以ASCII码显示数据包。
例:只抓取1个数据包,并显示其内容。
命令:
tcpdump-c1-A
利用-X参数能16进制数与ASCII码共同显示数据包。
例:只抓取1个数据包,并显示其内容。
命令:
tcpdump-c1-X
Wireshark(以前是ethereal)是Windows下非常大略易用的抓包工具,现在也有Linux版本。
通过Tcpdump抓取的数据包剖析比较麻烦,要想很方便的剖析数据包, 我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里剖析包。
保存数据包为wireshark能识别的文件:
tcpdumptcp-ieth1-t-s0-c100anddstport!22andsrcnet192.168.1.0/24-w./target.cap