概述简单的定义tcpdump,即:dumpthetrafficonanetwork,一种数据包分析工具,根据用户的定义截取网络上的数据包。tcpdump可以完整截取网络中传输的数据包的“包头”,并提供分析。支持针对网络层、协议、主机、网络或端口的过滤,提供and、or、not等逻辑语句,帮助您去除无用信息。tcpdump是基于底层libpcap库开发的,需要root权限才能运行。一、tcpdump安装一、环境虚拟机:vmware15.5.2os:ubuntu12.042。安装tcpdumpsudoapt-getinstalltcpdump3。查看版本tcpdump--htcpdumpversion4.0.libpcapversion1.1.1表示libpcap的版本。二、tcpdump参数常用参数选项说明:三、命令选项使用示例1、拦截主机接收和发送的所有数据包。命令:tcpdump说明:tcpdump拦截数据包,默认显示数据包的头部。通常,直接启动tcpdump将监视第一个网络接口上流动的所有数据包。基本格式:TimePacketTypeSourceIPPort/Protocol>DestinationIPPort/ProtocolDetailsProtocol按Ctrl+C将终止tcpdump命令。最后生成统计数据。终止tcpdump2。指定抓包个数-c指定抓包2个。命令:tcpdump-c2描述:最后会自动生成统计信息。[注意,你已经切换到管理员了。如果想在虚拟机中生成数据包,可以再开一个窗口pingbaidu.com,后面不会提示]pingbaidu.com3.将抓包信息写入文件-w,使用-woption指定日志文件。命令:tcpdump-c10-wtcpdump_test.log说明:保存的文件不是文本格式,无法直接查看。tcpdump保存的文件格式,几乎所有主流的抓包工具软件都可以读取。因此您可以使用更具可读性的GUI工具来查看日志文件。4.读取记录文件-r使用-r选项读取文件。命令:tcpdump-rtcpdump_test.log!【阅读日志文件5.打印出所有工作接口-D命令:tcpdump-D其中网卡为eth0。6、指定监控的网卡-i命令:tcpdump-ieth0如果不指定网卡,默认的tcpdump只会监控第一个网络接口,通常是eth0。7、显示更详细的抓包信息-v-vv选项-v,-vv可以显示更详细的抓包信息。tcpdump-vtcpdump-vv8。不使用域名反向解决方案-n使用-n后,tcpdump会直接显示IP地址,不会显示域名(类似于netstat命令)。9.添加抓包时间戳-tttt选项。默认情况下,tcpdump的所有输出打印行都会包含时间戳信息;时间戳信息的显示格式如下hh:mm:ss.frac(nt:hour:minute:second.)这个时间戳的精度与内核时间的精度是一致的, 反映了时间内核首先看到相应的数据包;数据包从物理线路传到内核的时间,以及内核在这个数据包上花费的中断处理时间都不算;使用-tttt选项,抓包结果会包含抓包日期:命令:tcpdump-tttt增加抓包时间戳4.条件过滤1.过滤:指定抓包的协议tcpdump只能抓取某种类型的协议包支持指定以下协议:“ip、ip6、arp、tcp、udp、wlan”等。命令:tcpdumpudptcpdumpicmptcpdumptcptcpdumparp2.Filter:指定协议的端口号使用port参数指定端口号。命令:tcpdumptcpport80使用portrange参数指定端口范围。命令:tcpdumptcp端口范围1-10243。Filter:指定source和targetsrc表示来源。dst代表目的地。命令:tcpdumpsrcport8080tcpdumpdstport804。Filter:指定特定主机的消息包,使用host指定要监控的主机。命令:tcpdumphost192.168.1.113注意:如果使用host参数,则使用计算机名或域名。比如tcpdumphostshi-pc,就不能再使用-n选项了。5.过滤:指定数据包大小。使用greater(大于)和less(小于)来指定数据包大小的范围。“示例:只抓取大于1000字节的数据包。”命令:tcpdumpgreater1000"例:只抓取小于10字节的数据包。》命令:tcpdumpless105.逻辑表达式使用基本的逻辑组合,组装出更细化的过滤条件。1.逻辑与逻辑和关系,使用and。命令:tcpdumptcpandhost192.168.1.112tcpdumptcpandsrc192.168.1.112andport80802。逻辑or逻辑or关系,使用or.command:tcpdumphost192.168.1.112or192.168.1.1133逻辑非逻辑非关系,不用,也可以用!。如果用!,后面的字符必须用空格隔开。例子:通过ssh协议远程使用tcpdump时,为了避免ssh数据包的输出,一般需要禁止ssh数据包的输出命令:tcpdumpnottcpport22tcpdump!tcpport224中括号括号内需要用引号,或者反向使用,否则会报错例子:抓取主机为192.168.1.112和192.168.1.113的非22端口的TCP包。Command:tcpdumpnottcpport22andhost192.168.1.112or192.168.1.113tcpdump"nottcpport22andhost(192.168.1.112or192.168.1.113)"tcpdumpnottcpport22andhost"(192.168.1.112or192.168.112or192.168.1.113)Packettcpdumphostsundown2.Interceptthecommunicationbetweenhost210.27.48.1和主机210.27.48.2或210.27.48.3tcpdumphost210.27.48.1and\(210.27.48.2or210.27.48.3\)3.除210.27.48.2以外的所有主机通信的ip包,使用命令:tcpdumpiphost210.27.48.1and!210.27.48.24.监听发送给主机hostname的所有数据包tcpdump-ieth0dsthosthostname5.获取主机210.27.48.123telnet端口接收或发送的telnet数据包tcpdumptcpport23andhost210.27.48.16.监听本地udp端口123.端口123是ntp服务端口tcpdumpudpport1237,使用tcpdump抓HTTP包tcpdump-XvvennSs0-ieth0tcp[20:2]=0x4745ortcp[20:2]=0x48540x4745是“GET”的前两个字母“GE”,0x4854是前两个字母“HTTP”的“HT”。tcpdump没有完全解码the截取的数据,数据包中的大部分内容都是直接以16进制形式打印出来的。显然,这不利于分析网络故障。通常的解决方案是使用带**-w参数的tcpdump截取数据并保存到文件**,然后使用其他程序(如Wireshark)进行解码分析。当然还要定义过滤规则,避免抓包占满整个硬盘。6、查看数据包的完整内容tcpdump默认不显示数据包的详细内容。方法一:使用-A参数,以ASCII码显示数据包。示例:只捕获一个数据包并显示其内容。命令:tcpdump-c1-A方法二:使用-X参数可以同时显示十六进制和ASCII码的数据包。示例:只捕获一个数据包并显示其内容。命令:tcpdump-c1-Xtcpdump和wiresharkWireshark(原名ethereal)是Windows下一款非常简单易用的抓包工具,现在有Linux版本了。Tcpdump抓取的数据包分析比较麻烦。为了方便分析数据包,我们可以使用Tcpdump+Wireshark的完美结合来实现:在Linux下抓包,然后在Windows下进行分析。将数据包保存为wireshark识别的文件:tcpdumptcp-ieth1-t-s0-c100anddstport!22andsrcnet192.168.1.0/24-w./target.cap参数含义
