tcpdump使用命令行方式过滤抓取接口数据包,其丰富的功能体现在灵活的表达方式上。不带任何选项的tcpdump默认会抓取第一个网络接口,直到tcpdump进程终止才会停止抓包。例如:shell>tcpdump-nn-ieth0icmp下面是tcpdump的详细用法。1.1tcpdump选项它的命令格式是:tcpdump[-DenNqvX][-ccount][-Ffile][-iinterface][-rfile][-ssnaplen][-wfile][expression]captureoption:-c:指定要抓取的包数。注意,最终还是需要获取这么多包。例如,指定“-c10”将获取10个包,但可能已经处理了100个包,但只有10个包是符合条件的包。-iinterface:指定tcpdump需要监控的接口。如果不指定该选项,则从系统接口列表中查找配置的编号最小的接口(不包括loopback接口,使用tcpdump-ilo抓取loopback接口),:一旦找到第一个符合条件的接口,现在搜索结束了。所有网络接口都可以使用“any”关键字来表示。-n:地址显式为数字,否则为主机名,即-n选项不进行主机名解析。-nn:除了-n的作用外,端口也显示为一个值,否则显示端口服务名。-N:不打印出主机的域名部分。例如,tcpdump将打印“nic”而不是“nic.ddn.mil”。-P:指定要捕获的数据包是传入数据包还是传出数据包。可以给出的值有“in”、“out”和“inout”,默认是“inout”。-slen:设置tcpdump的抓包长度为len,如果不设置,默认为65535字节。当抓取的数据包较大时,如果长度设置不够,可能会出现截包的情况。如果发生数据包截断,输出行中将出现一个“[|proto]”标记(proto实际上将显示为协议名称)。但是capturelen越长,数据包处理时间越长,同时会减少tcpdump可以缓存的数据包数量,:这样会导致数据包丢失,所以在我们能抓到的前提下packetswewant,capture长度越短越好。输出选项:-e:每行输出都会包含数据链路层报头信息,如源MAC和目的MAC。-q:快速打印输出。即打印的协议相关信息很少,所以输出行比较短。-X:输出包头数据,会同时以十六进制和ASCII输出。-XX:输出包的包头数据会同时以十六进制和ASCII输出,更详细。-v:分析和打印时产生详细的输出。-vv:产生比-v更详细的输出。-vvv:产生比-vv更详细的输出。其他功能选项:-D:列出可用于抓包的接口。将列出接口的数字编号和接口名称,两者都可以在“-i”之后使用。-F:从文件中读取抓包表达式。如果使用此选项,则命令行上给出的任何其他表达式都将无效。-w:将抓包数据输出到文件而不是标准输出。可以同时使用“-Gtime”选项,使输出文件每隔秒自动切换到另一个文件。可以通过“-r”选项加载这些文件进行分析和打印。-r:从给定的数据包文件中读取数据。使用“-”从标准输入读取。为您推荐:值得收藏!Linux系统常用命令速查手册所以常用的选项有这几个:如果没有给出表达式,将输出所有数据包,否则只输出表达式为真的数据包。出现在表达式中的Shell元字符建议用单引号括起来。tcpdump的表达式由一个或多个“单元”组成,每个单元一般包含ID修饰符和一个ID(数字或名称)。修饰符一共有三个:(1).type:指定ID的类型。可以给的值有host/net/port/portrange。例如“主机foo”、“网络128.3”、“端口20”、“端口范围6000-6008”。默认类型是主机。(2).dir:指定ID的方向。可以给的值包括src/dst/src或者dst/src和dst,默认是src或者dst。例如,“srcfoo”表示源主机为foo的数据包,“dstnet128.3”表示目标网络为128.3的数据包,“srcordstport22”表示源或目标端口为22的数据包。(3).proto:通过给定的协议限制匹配的数据包类型。常用的协议有tcp/udp/arp/ip/ether/icmp等,如果没有给出协议类型,将匹配所有可能的类型。例如“tcp端口21”、“udp端口??范围7000-7009”。因此,一个基本的表达单元格式是“protodirtypeID”。除了由修饰符和ID组成的表达式单元外,还有关键字表达式单元:gateway、broadcast、less、greater和算术表达式。可以使用运算符“and/&&/or/||/not/!”连接表达式单元,形成复杂的条件表达式。例如“hostfooandnotportftpandnotportftp-data”,表示过滤后的数据包必须满足“packageswithhostfooandportsotherthanftp(port21)andftp-data(port20)",commonports与名称的对应关系可以在Linux系统中的/etc/service文件中找到。另外,同样的修饰符可以省略,例如“tcpdstportftporftp-dataordomain”与“tcpdstportftportcpdstportftp-dataortcpdstportdomain”意思相同,即表示数据包的协议是tcp,目标端口是ftp或ftp-data或域(端口53)。使用中括号“()”改变表达式的优先级,但需要注意的是中括号会被shell解释,所以应该使用反斜杠“”转义为“()”,需要的时候,需要用引号将它们括起来。1.3tcpdump示例注意tcpdump只能抓取流经本机的数据包。(1).默认情况下启动tcpdump。默认情况下,直接启动tcpdump将监视在第一个网络接口(不是lo端口)上流通的所有数据包。这样抓取的结果就会很多,滚动起来也很快。(2).监听指定网口的数据包tcpdump-ieth1如果没有指定网卡,默认的tcpdump只会监听第一个网口,比如eth0。(3).监控指定主机的数据包,如所有进入或离开longshuai的数据包tcpdump主机longshuai(4)。打印helios<-->hotorhelios<-->acetcpdumphostheliosand(hotorace)(5)之间通信的数据包。打印ace和任何其他主机之间通信的IP数据包,但不包括helios和tcpdumpiphostaceandnothelios(6)之间的数据包。截取主机hostname发送的数据所有数据tcpdumpsrc主机hostname(7)。监控发送到主机hostnametcpdumpdst主机hostname(8)的所有数据包。监听指定主机和端口的包tcpdumptcpport22andhosthostname(9)。监听123端口(123是ntp的服务端口)tcpdumpudpport123(10)。监控指定网络的数据包,比如本机与192.168网段通信的数据包,“-c10”表示只抓取10包tcpdump-c10net192.168(11)。打印所有通过网关snup的ftp数据包(注意表达式用单引号括起来,可以防止shell误解析括号)shell>tcpdump'gatewaysnupand(portftporftp-data)'(12)。捕获ping数据包[root@server2~]#tcpdump-c5-nn-ieth0icmptcpdump:抑制详细输出,使用-v或-vv在eth0上进行完整协议解码侦听,链路类型EN10MB(以太网),捕获大小65535bytes12:11:23.273638IP192.168.100.70>192.168.100.62:ICMPechorequest,id16422,seq10,length16436.2:192.168.100.62>192.168.100.70:ICMP回声回复,ID16422,SEQ10,长度6412:11:24.356915IP192.168.100.100.70>192.168.100.62192.168.100.62?>?192.168.100.70:?ICMP?echo?reply,?id?16422,?seq?11,?length?6412:11:25.440887?IP?192.168.100.70?>?192.168.100.62:?ICMP?echo?request,?id?16422,?seq?12,?length?64packets?capturedpackets?received?by?filterpackets?droppedbykernel如果明确抓取host为192.168.100.70到本机的ping,使用and运算符[root@server2~]#tcpdump-c5-nn-ieth0icmp和src192.168.100.62tcpdump:抑制详细输出,使用-v或-vv在eth0上进行完整协议解码侦听,链路类型EN10MB(以太网),捕获size?65535?bytes12:09:29.957132?IP?192.168.100.70?>?192.168.100.62:?ICMP?echo?request,?id?16166,?seq?1,?length?6412:09:31.041035?IP?192.168.100.70?>?192.168.100.62:?ICMP?echo?request,?id?16166,?seq?2,?length?6412:09:32.124562?IP?192.168.100.70?>?192.168.100.62:?ICMP?echo?request,?id?16166,?seq?3,?length?6412:09:33.208514?IP?192.168.100.70?>?192.168.100.62:?ICMP?echo?request,?id?16166,?seq?4,长度6412:09:34.29222IP192.168.100.70>192.168.100.62:ICMP回声请求,ID16166,seq5,长度64packets捕获的FilterPackets由FilterPackets捕获的FilterPackets由KerneldrogedtromkernelprockofKernelprockofKernelprostyKernelprostyKernelprosstyKernelprostheKernelprostheKernelprosswyKernelprostyKernelprostyKernelricmpsrcicmpsrcicmpsrcicmpsrc。直接使用主机类型。(13).抓取到本机22端口包[root@server2~]#tcpdump-c10-nn-ieth0tcpdstport22tcpdump:verboseoutputsuppressed,use-vor-vvfor完整协议decodelisteningoneth0,链接类型EN10MB(以太网),捕获大小65535字节12:06:57.574293IP192.168.100.1.5788>192.168.100.62.22:标志[.],ack535528834,win2053,长度152.626:0172.626100.1.5788>192.168.100.62.22:Flags[.],ack193,win2052,长度012:06:57.684688IP192.168.100.1.5788>192.168.100.62.22:1Flackswin3[.],5,长度012:06:57.738977IP192.168.100.1.5788>192.168.100.62.22:Flags[.],ack577,win2050,长度012:06:57.794305IP192.168.1002162.1>6212.1>8788标志[.],ack769,win2050,长度012:06:57.848720IP192.168.100.1.5788>192.168.100.62.22:标志[.],ack961,win2049,长度012:06:57.908.1640927.IP100.1.5788>192.168.100.62.22:Flags[.],ack1153,win2048,长度012:06:57.958477IP192.168.100。1.5788>192.168.100.62.22:Flags[.],ack1345,win2047,length012:06:58.014338IP192.168.100.1.5788>192.168.100.62.22:Flags[.3,27,acklength5],51012:06:58.069361IP192.168.100.1.5788>192.168.100.62.22:Flags[.],ack1729,win2052,length0packetscapturedpacketsreceivedbyfilterpacketsdroppedbykernel(14).解[@解析]#tcpdump-c2-q-XX-vvv-nn-ieth0tcpdst端口22tcpdump:监听eth0,链接类型EN10MB(以太网),捕获大小65535字节12:15:54.788812IP(tos0x0,ttl64,ID19303,偏移0,标志[DF],ProtoTCP(6),长度40)192.168.100.1.5788>192.168.100.62.22:TCP00x0000:000C290892349234005056C056C056C0008080808004500450045004500..............PV.....E.0x0010:00284b6740004006a5d8c0a86401c0a8.(Kg@.@.....d...0x0020:643e169c001624265fd61fec2b625010>b.0..$&:080378440000000000000000..xD........12:15:54.842641IP(TOS0x0,TTL64,ID19304,Offset0,FLAGS[DF],ProtoTCP(6),Length40)192.168.100.5788>192.168.100.622:000c00:000C290892340005056c0000888202d68>0260....$&_...-bP。0x0030:080176460000000000000000..vF........packetscapturespacketsreceivedbyfilterpacketsdroppedbykernerdump基本的数据包抓包方法还是比较简单的,只要掌握几个有限的选项(-nn-XX-vvv-i-c-q),然后组合表达式。转自:马金龙www.cnblogs.com/f-ck-need-u/p/7064286.html
