什么是tcpdump

    在Linux中输入指令man tcpdump给出的概念如下所示:

tcpdump - 转储网络上的数据流

是还是不是感到很懵?大家用浅显、形象、学术的表明格局来任何描述tcpdump:

  • 浅显的来说,tcpdump是多少个抓包工具,用于抓取互联网中传输的数据包
  • 形象的来说,tcpdump就像国家海关,凡是入境和过境的商品,海关都要抽检,看看个中具体是怎么商品
  • 学术的来说,tcpdump是一种Sniffer(嗅探器),利用以太网的本性,通过将互联网设施放置混杂形式来赢得传输在互联网中的新闻包

在使用tcpdump需要了解以下的知识点:
1、了解和使用过Linux系统
2、学习OSI七层协议和作用
3、熟悉网络协议,特别是IP/TCP/UDP
4、了解交换机、路由器所对应的协议层且知道两者的差异

tcpdump介绍

原文:

tcpdump 是3个运维在命令行下的抓包工具。它同意用户拦截和出示发送或收受过互连网连接到该计算机的TCP/IP和别的数据包。tcpdump
适用于

大多数的类Unix系统操作系统(如linux,BSD等)。类Unix系统的 tcpdump
需求采用libpcap这些捕捉数据的库就像 windows下的WinPcap。

在就学tcpdump前最佳对基本网络的网络知识有肯定的认识。

tcpdump命令格式及常用参数

Tcpdump的大概格局如下:

例:tcpdump –i eth0 ’port 1111‘ -X -c 3

-X告诉tcpdump命令,需求把协商头和包内容都一清二楚的显得出来(tcpdump会以16进制和ASCII的花样显得),那在开始展览商议分析时是纯属的利器。

 

tcpdump选取命令行情势,它的吩咐格式为:

  tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]

          [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]

                                       [ -T 类型 ] [ -w 文件名 ]
[表达式 ]

 tcpdump的抉择介绍

   -a    将网络地址和播放地址转变成名字;

   -d    将万分音信包的代码以人们能够领会的汇编格式给出;

   -dd    将匹配音讯包的代码以c语言程序段的格式给出;

   -ddd    将格外音讯包的代码以十进制的形式提交;

   -e
   在输骑行打字与印刷出多少链路层的头顶新闻,包罗源mac和指标mac,以及网络层的情商;

   -f    将表面包车型大巴Internet地址以数字的款型打字与印刷出来;

   -l    使标准输出变为缓冲行格局;

   -n
   内定将种种监听到多少包中的域名转换来IP地址后出示,不把网络地址转换到名字;

     -nn:  
 钦赐将每一个监听到的数额包中的域名转换来IP、端口从使用名称转换来端口号后出示

   -t    在出口的每一行不打字与印刷时间戳;

   -v
   输出三个有些详细的音信,例如在ip包中得以总结ttl和服务类型的音信;

   -vv    输出详细的报文新闻;

   -c    在收取钦赐的包的数额后,tcpdump就会停下;

   -F    从钦定的文件中读取表明式,忽略其余的表明式;

   -i    钦命监听的网络接口;

      -p:    将网卡设置为非混杂情势,无法与host或broadcast一起使用

   -r    从钦赐的文本中读取包(那几个包一般通过-w选项爆发);

   -w    直接将包写入文件中,并不分析和打字与印刷出来;

            -s snaplen       
 snaplen表示从3个包中截取的字节数。0意味包不截断,抓全体的数据包。默许的话
tcpdump 只呈现部分数据包,默许68字节。

   -T    将监听到的包直接表明为钦点的类型的报文,常见的门类有rpc
(远程进度调用)和snmp(简单互连网管理协议;)

          -X          
 告诉tcpdump命令,要求把协商头和包内容都一五一十的展现出来(tcpdump会以16进制和ASCII的款型体现),那在进行协商分析时是相对的利器。

 

------------------------------------------------

一 、抓取回环网口的包:tcpdump -i lo

二 、制止包截断:tcpdump -s0

③ 、以数显主机及端口:tcpdump -n

         如键入命令: tcpdump –i eth0 ‘port 1111’ -X -c 3

 

         澳门金沙国际 1

-i 是interface的意思,是指大家有分文不取告知tcpdump希望他去监听哪八个网卡,

-X告诉tcpdump命令,必要把协议头和包内容都原原本本的来得出来(tcpdump会以16进制和ASCII的花样展现),那在展开协商分析时是绝对的利器。

port 1111大家只关心源端口或指标端口是1111的数据包.

-c 是Count的意思,那设置了我们盼望tcpdump帮大家抓多少个包。

内部还有别的3个比较关键的参数– l  使得出口变为行缓冲

-l选项的机能就是将tcpdump的出口变为“行缓冲”形式,这样能够保险tcpdump碰着的剧情一经是换行符即将缓冲的始末输出到正式输出,以便于采纳管道

或重定向情势来展开后续处理。

Linux/UNIX的标准I/O提供了全缓冲、行缓冲和无缓冲三种缓冲格局。

规范错误是不带缓冲的,终端设备常为行缓冲,而任何意况暗许都以全缓冲的。

 

比如大家只想提取包的每一行的第一个域(时间域),那种意况下大家就供给-l将暗中认可的全缓冲变为行缓冲了。

tcpdump -i eth0 port 1111 -l | awk ‘{print $1}’

         澳门金沙国际 2

参数–w  -r

-w 直接将包写入文件中(即原始包,假诺选用 重定向 >
则只是保存展现的结果,而不是本来文件),即所谓的“流量保存”—正是把抓到的网络包能存款和储蓄到磁盘上,

保存下来,为继承使用。参数-r
达到“流量回放”—正是把历史上的某近来间段的流量,重新模拟重播出来,用于流量分析。

        澳门金沙国际 3

由此-w选项将流量都存款和储蓄在cp.pcap(二进制格式)文件中了.能够通过 –r 读取raw
packets文件 cp.pcap. 

如:sudo tcpdump i- eth0 ‘port 1111’ -c 3 -r cp.pcap 即可开始展览流量回看。

问:流量回看又有啥用?

 

概述

Tcpdump介绍

基本语法

tcpdump [选项] [网络接口]

常用选项如下所示:

选项 说明
-A 只显示ASCII形式的数据包内容
-c 就是Count的含义,指在接收到指定数量的分组包后退出,简单来说就是允许抓几个包
-d 将匹配信息包的编码以人们能够理解的格式进行显示并退出
-dd 将匹配信息包的编码以C语言程序段的格式显示
-ddd 将匹配信息包的编码以十进制的形式显示
-D 列出所有可以选择的抓包对象
-e 添加数据链路层的头部信息
-F 指定过滤表达式所在的文件
-i 即interface,指定监听的网络接口
-l 将输出变为行缓冲模式
-n 不将主机地址转换为名字
-nn 不转换协议和端口号,当tcpdump遇到协议号或端口号,不需要将这些数字转换为对应的协议名称或端口名称,如22端口SSH端口,我们希望显示22,而非SSH
-p 将网络接口设置为非混杂模式
-q 快速输出,仅输出较少的协议信息
-r 从文件中读取原始数据包,而这个文件通过由选项 -w 所产生
-t 在每一行中不输出时间戳
-tt 在每一行中输出非格式化的时间戳
-ttt 在每一行中输出本行与前一行的时间差,单位为ms
-tttt 在每一行中输出由date处理的默认格式的时间戳
-ttttt 在每一行中输出本行与第一行的时间差,单位为ms
-v 显示更详细的信息
-w 将原始数据包信息保存到文件中
-X 将协议头和包内容原原本本的显示出来

tcpdump的出口结果介绍

 键入命令:sudo tcpdump -i eth0 -e -nn -X -c 2 ‘port1111’
所缴获包内容如下:

   -n    不把网络地址转换到名字;

 

 sudo tcpdump -i eth0 -e -nn -X -c 2 ‘port1111’ 

        澳门金沙国际 4

 

第一行:“tcpdump: verbose output suppressed, use -v or -vv for
fullprotocol decode”

提醒使用选用-v和-vv,能够看来更全的输出内容。

第二行“listening on eth0, link-type EN10MB (Ethernet), capture size
65535bytes”

咱俩监听的是通过eth0那些NIC设备的网络包,且它的链路层是基于以太网的,要抓的包大小限制是65535字节。包大小限制值能够透过-s选项来安装。

第三行”12:40:33.569037 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4,
ethertypeIPv4 (0x0800),”

澳门金沙国际 ,12:40:33.569037 独家对应着这一个包被抓到的“时”、“分”、“秒”、“微妙”。

00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4
表示MAC地址00:19:e0:b5:10:94发送到MAC地址为00:1a:a0:31:39:d4的主机,ethertype
IPv4 (0x0800)表示

Ethernet帧的商业事务项目为ipv4(即代码为0x0800)。

第四行”length 66: 210.45.123.249.27236 > 172.16.0.11.1111: Flags
[S],seq 1624463808,

length 66象征以太帧长度为66。
210.45.123.249.27236代表那几个包的源IP为210.45.123.249,源端口为27236,’>’表示数据包的传导方向,
172.16.0.11.1111,

意味着这一个数据包的目的端ip为172.16.0.11,目标端口为1111,1111端口是自家的3个web服务器监听端口。Flags是[S],注明是syn建立连接包(即3次握手的首次

握手),seq1624463808
序号为1624463808,那么些实在就是TCP一遍握手的首先次握手:client(210.45.123.249)发送syn请求建立连接包。

第五行” win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK],
length 0”

win 8192 表示窗口大小为8192字节。options[mss 1460,nop,wscale
2,nop,nop,sackOK]为tcp首部可选字段mss
1460意味mss是发送端(客户端)文告的最大

报文段长度,发送端将不接收超越这一个尺寸的TCP报文段(那一个值和MTU有自然关联)。nop是1个空操作选项,
wscale建议发送端选取的窗口扩展因子为2, sackOK

意味着发送端帮衬并同意使用SACK选。

下边几行分别是IP,TCP首部 ,那里不再敷述。

 

man tcpdump  已阅


示例

如果要使用tcpdump抓包,一定要切换到root账户中。

壹 、第③个抓包示例

[root@localhost ~]# tcpdump -i ens5f1 -nn -X 'port 22' -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
22:34:11.334916 IP 192.168.8.8.22 > 112.64.61.186.37035: Flags [P.], seq 3341229570:3341229782, ack 1999159071, win 31152, length 212
    0x0000:  4510 00fc 7e99 4000 4006 44a8 c0a8 0808  E...~.@.@.D.....
    0x0010:  7040 3dba 0016 90ab c727 1e02 7728 bf1f  p@=......'..w(..
    0x0020:  5018 79b0 7799 0000 0000 00b0 823d 4cf1  P.y.w........=L.
    0x0030:  1108 58fc 3686 2bd2 5220 fe37 85ab 74cc  ..X.6.+.R..7..t.
    0x0040:  bfb1 8831 7d1c 3b57 52ae aa91 28a2 67d8  ...1}.;WR...(.g.
    0x0050:  08fb a257 7fc8 7186 39dc d266 3d32 cce8  ...W..q.9..f=2..
    0x0060:  3eb7 130b a7d3 833b 59c9 bdf8 2141 6863  >......;Y...!Ahc
    0x0070:  7cae 25ff 459e c94a a635 7098 6925 db48  |.%.E..J.5p.i%.H
    0x0080:  a9b0 32ab 5393 737f cf8c f2ed b47a 7d8b  ..2.S.s......z}.
    0x0090:  346c 39df 3ecc d2b0 e0ad 5104 272d 6513  4l9.>.....Q.'-e.
    0x00a0:  4b8d 5ee6 6c7d 9477 e40b 8637 996a bb5a  K.^.l}.w...7.j.Z
    0x00b0:  471a 2ac4 3335 266d 0485 2e52 b2c2 f6e8  G.*.35&m...R....
    0x00c0:  0549 5ae0 9c7b ad45 da0a eef2 1ccb b2ac  .IZ..{.E........
    0x00d0:  a4a2 0a96 cc5f 238c 9570 0d15 984e 6f58  ....._#..p...NoX
    0x00e0:  d8ff 8034 1165 cf44 02e4 ed6b 631e 2548  ...4.e.D...kc.%H
    0x00f0:  56fd 4c8a 664c e5ee d845 2e50            V.L.fL...E.P
1 packet captured
1 packet received by filter
0 packets dropped by kernel

-i : 钦定用来抓包的互联网接口,这几个参数在服务器有多少个网卡的时候分外管用
-nn :
不转换协议和端口号,当tcpdump遭逢协议号或端口号,不要求将那个数字转换为对应的合计名称或端口名称,如22端口SSH端口,我们盼望彰显22,而非SSH
-X :
将协商头和包内容原原本本的显示出来,tcpdump会同时以16进制和ASCII的花样举行浮现,在协议分析时尤其好用。
‘port 22’ :
告诉tcpdump要有取舍的显得所抓到的包,在该示例中,只突显源端口或目标端口是22的数据包,其余的数据包则不出示。
-c :
用来钦点抓包的个数,示例设置的个数为1,则意味着仅抓取3个包后头就退出不再抓包了。

② 、-e 扩充数量链路层的底部新闻

  • 不带-e的抓包

[root@localhost ~]# tcpdump -i ens5f1 -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:44:06.918259 IP localhost.localdomain.ssh > 112.64.61.186.37035: Flags [P.], seq 3341233794:3341234006, ack 1999165283, win 31152, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel
  • 带-e的抓包

[root@localhost ~]# tcpdump -i ens5f1 -c 1 -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:45:51.114314 dc:fe:18:65:76:f2 (oui Unknown) > 34:97:f6:5a:50:e0 (oui Unknown), ethertype IPv4 (0x0800), length 82: 112.85.42.197.20263 > localhost.localdomain.ssh: Flags [P.], seq 254675888:254675904, ack 306708143, win 155, options [nop,nop,TS val 3668622988 ecr 391712180], length 16
1 packet captured
8 packets received by filter
0 packets dropped by kernel

   
通过三个指令的出口相比,可以看来扩充-e选项后,输出的结果中加进MAC地址消息。而且在出口内容中会有oui
Unknown
,OUI即Organizationally unique
identifier(组织唯一标识符),在其它一块网卡中烧录的6字节MAC地址中,前2个字节显示了OUI,其表明了网卡的创设公司,日常情况下,该标识符是绝无仅有的。在本例中,由于并未辨别出网卡的创建商,因而显得为Unknown。

三 、-l 将出口变为行缓冲形式

   
-l的职能是将tcpdump的输出游为变为行缓冲措施,那样能够保险tcpdump碰到换行符,就立时将缓冲的剧情输出到正式输出(stdout),方便利用管道或重定向格局举办后续处理,而不会造成延迟。
   
在Linux的标准I/O中提供了全缓冲行缓冲无缓冲三种缓冲格局。标准错误是不带缓冲的,而终端设备常为行缓冲,其余默许则为全缓冲。

[root@localhost ~]# tcpdump -i ens5f1 -l -c 5 | awk '{print $5}'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
112.64.61.186.37035:
gateway.domain:
localhost.localdomain.49348:
gateway.domain:
localhost.localdomain.ssh:
5 packets captured
13 packets received by filter
0 packets dropped by kernel

   
在该例中,将tcpdump输出的剧情通过管道提取第四列,能够用来查阅详细的总是消息。而假使不加
-l
选项时,则唯有当缓冲区全体占满时,tcpdump才会将缓冲区中的内容输出,那样就有也许造成出口不总是的,就算强行终止,则会影响下一行的完整性。

肆 、-t 输出不加时间戳

[root@localhost ~]# tcpdump -i ens5f1 -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:48:03.193526 IP localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], seq 3091447763:3091447975, ack 4113666212, win 251, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel

[root@localhost ~]# tcpdump -i ens5f1 -c 1 -t
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
IP localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], seq 3091448643:3091448855, ack 4113666488, win 251, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel

   
在追加选项-t选择后,时间23:48:03.193426就熄灭了。tcpdump暗中认可意况下是按阿秒来计时,由此最2个时刻标准到了第陆位。

5、 -v 展现详细消息

[root@localhost ~]# tcpdump -i ens5f1 -c 1 -v
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:53:13.252748 IP (tos 0x10, ttl 64, id 24820, offset 0, flags [DF], proto TCP (6), length 188)
    localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], cksum 0x7661 (incorrect -> 0x2474), seq 3091449471:3091449619, ack 4113666972, win 251, length 148
1 packet captured
7 packets received by filter
0 packets dropped by kernel

   
在增加-v分选后,会在出口的内容中扩大tosttlidoffset钻探编号总长度等,如必要领悟那几个信息,就必要精晓TCP/IP协议中的头的求实定义了。

⑥ 、-F 内定过滤表达式所在的公文
    在第1个示范中,命令行增添了‘port
22’
,而这一项就叫过滤条件,如若设置了过滤条件,则tcpdump只抓取满足过滤条件的数据包。如需求安装较为复杂的过滤条件或复用过滤条件时,那时能够将过滤条件保存为文件,然后通过-F加载该过滤文件。

[root@localhost ~]# cat tcpdumpFilter.txt
port 22

[root@localhost ~]# tcpdump -i ens5f1 -c 1  -v  -F ~/tcpdumpFilter.txt 
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
00:05:52.685555 IP (tos 0x10, ttl 64, id 25291, offset 0, flags [DF], proto TCP (6), length 188)
    localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], cksum 0x7661 (incorrect -> 0x827b), seq 3091492507:3091492655, ack 4113685300, win 251, length 148
1 packet captured
3 packets received by filter
0 packets dropped by kernel

⑦ 、 -w 将原来数据包音信保存到文件中

[root@localhost ~]# tcpdump -i ens5f1 -c 1  -v  -F ~/tcpdumpFilter.txt -w ~/tcpdumpRAW
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
1 packet captured
1 packet received by filter
0 packets dropped by kernel

[root@localhost ~]# cat tcpdumpRAW 
Ճ²¡¯OW[ߌ
        ˊݾev𴘶ZE¼c&@@ap@<J¸Duÿ󲡀P񠱆½W?.[֮OGҳ©F ©؂C�>{d6tºв©w厸§Ng}¼󇐼OҠ6I}+/l𩅾 
                                                                         GߪZĔ°}_`ª5±˶z
寂Y凢

   
当我们查阅保存的公文时,出现的是乱码。则表示不或者间接查看,很有恐怕是二进制文件。那么怎么查看保存的文本了?请看下一个示范。

[root@localhost ~]# file tcpdumpRAW
tcpdumpRAW: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)

柒 、 -r 从文件中读取原始数据包

[root@localhost ~]# tcpdump -r ~/tcpdumpRAW
reading from file /root/tcpdumpRAW, link-type EN10MB (Ethernet)
00:11:27.838878 IP localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], seq 3091494399:3091494547, ack 4113686720, win 251, length 148

    通过-w和-r选项即可兑现抓包的摄像重放功效。

正文同步在微信订阅号上宣布,如各位小伙伴们喜欢本人的稿子,也足以关心笔者的微信订阅号:woaitest,或扫描上边包车型大巴二维码添加关怀:
澳门金沙国际 5

tcpdump过滤语句介绍

能够给tcpdump传送“过滤表达式”来起到网络包过滤的效益,而且能够支撑传入单个或三个过滤表明式。

能够因此命令 man pcap-filter 来参考过滤表明式的支援文书档案

过滤表明式大体能够分成三种过滤条件,“类型”、“方向”和“协议”,那二种规格的反衬组合就构成了笔者们的过滤表明式。

关于项目标关键字,首要归纳host,net,port, 例如 host
210.45.114.211,钦命主机 210.45.114.211,net 210.11.0.0
指明210.11.0.0是3个互连网地址,port 21 指明

端口号是21。如若没有点名项目,缺省的门类是host.

关于传输方向的显要字,首要回顾src , dst ,dst or src, dst and src ,

这个重要字指明了传输的自由化。举例表明,src 210.45.114.211
,指明ip包中源地址是210.45.114.211, dst net 210.11.0.0
指止血的网络地址是210.11.0.0  。要是没有指明

动向重点字,则缺省是srcor dst关键字。

至于协议的首要字,首要不外乎 ether,ip,ip6,arp,rarp,tcp,udp等品类。那多少个的包的商议内容。假如没有点名别的协议,则tcpdump将会监听全数协议的

信息包。

如作者辈只想抓tcp的包命令为: sudo tcpdump -i eth0  -nn -c1 ‘tcp’

      澳门金沙国际 6

除去那三系列型的根本字之外,别的重点的根本字如下:

gateway, broadcast,less,greater,还有两种逻辑运算,取非运算是 ‘not ‘ ‘!
‘, 与运算是’and’,’&&’;或运算是’or’ ,’||’;

能够运用那么些首要字展开组合,从而结成为相比强硬的过滤条件。上边举例表明

(1)只想查目的机器端口是21或80的网络包,其余端口的本人不关注:

  sudo tcpdump -i eth0 -c 10 ‘dst port 21 or dst port 80’

(2) 想要截获主机172.16.0.11 和主机210.45.123.249或
210.45.123.248的通讯,使用命令(注意括号的行使):

【澳门金沙国际】基础教程,Tcpdump用法详解。  sudo tcpdump -i eth0 -c 3 ‘host 172.16.0.11 and (210.45.123.249
or210.45.123.248)’

(3)想取得使用ftp端口和ftp数据端口的网络包

   sudo tcpdump ‘port ftp or ftp-data’

   那里 ftp、ftp-data到底对应哪个端口? linux系统下
/etc/services那一个文件之中,就存款和储蓄着富有著名服务和传输层端口的相应关系。若是您一直把/etc/services里

  
的ftp对应的端口值从21改为了3333,那么tcpdump就会去抓端口含有3333的互连网包了。

(4)
假使想要获取主机172.16.0.11除了和主机210.45.123.249之外全部主机通讯的ip包,使用命令:

 sudo tcpdump ip ‘host 172.16.0.11 and ! 210.45.123.249’

(5) 抓172.16.0.11的80端口和110和25以外的其他端口的包

sudo tcpdump -i eth0 ‘host 172.16.0.11 and! port 80 and ! port 25 and !
port 110’

 

上面介绍一些tcpdump中过滤语句相比较高档的用法

想取得172.16.10.11和google.com之间确立TCP二遍握手中带有SYN标记位的网络包.

命令为:sudo tcpdump -i eth0 ‘host 172.16.0.11 andhost google.com and
tcp[tcpflags]&tcp-syn!=0’ -c 3 -nn

澳门金沙国际 7

 

上面包车型大巴授命是还是不是盯着有点晕的感觉到。    是的。

上面详细介相关文化。

实际大家领略那种语法:  proto [ expr : size] ,就简单驾驭上边的语句了。

上面详细介绍proto [ expr : size]

Proto即protocol的缩写,它意味着这里要钦定的是某种协议名称,如ip,tcp,udp等。由此可知能够钦命的合计有十八种,如链路层协议
ether,fddi,tr,wlan,ppp,slip,link,

网络层协议ip,ip6,arp,rarp,icmp传输层协议tcp,udp等。

expr用来钦命数量报字节单位的偏移量,该偏移量相对于钦赐的协议层,暗中认可的初叶地方是0;而size表示从偏移量的职务上马提取多少个字节,能够安装为

① 、② 、4,暗中认可为1字节。假设只设置了expr,而并未安装size,则暗中同意提取二个字节。比如ip[2:2],就意味着提取出第壹 、5个字节;而ip[0]则意味着提取ip协议头的

率先个字节。在我们领到了一定内容之后,大家就须要安装大家的过滤条件了,大家可用的“相比操作符”包涵:>,<,>=,<=,=,!=,总共有6个。

举例来说:想截取每一个TCP会话的序幕和终结报文(SYN 和 FIN 报文),
而且会话方中有2个远道主机.

sudo tcpdump ‘tcp[13] & 3 != 0 and not(src and dst net 172.16.0.0)’
-nn

假设熟知tcp首部报文格式能够相比较易于理解那句话,因为tcp便宜13字节的岗位为3位保留位和5个人标志位(URubiconG,ACK,PSH,LANDST,SYN,FIN),
所以与3相与就能够得出

SYN,FIN当中是不是三个置位1. 

从上边能够见到在写过滤表达式时,需求大家对情商格式相比较清楚才能把表明式写对。这一个相比较有难度的..。为了让tcpdump工具更人性化一些,有一对常用的偏移量,

能够经过一些称号来替代,比如icmptype表示ICMP协议的类型域、icmpcode表示ICMP的code域,tcpflags
则代表TCP协议的申明字段域。

更进一步的,对于ICMP的类型域,能够用这个名称具体指代:icmp-echoreply,
icmp-unreach, icmp-sourcequench, icmp-redirect,icmp-echo,
icmp-routeradvert, icmp-routersolicit, icmp-timxceed,
icmp-paramprob,icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply,
icmp-maskreq,icmp-maskreply。

而对此TCP协议的申明字段域,则能够细分为tcp-fin, tcp-syn, tcp-rst,
tcp-push, tcp-ack, tcp-urg。

对此tcpdump
只可以通过平日操作来领会这几个语句了。也得以把互联网包用tcpdump截获保存到钦命文件,然后用wireshark等可视化软件分析网络包。

 

参考:

yum install tcpdump

Tcpdumph会打字与印刷输出三个知足条件的互连网接口上多少包内容。
它也足以用-w标志运转,那样它将数据音信保存到3个文书中供以后分析,或行使-r标志,从保存的文书中读取数据。它也足以用-V标志运行,使其读取已保存的数额包文件列表。
在别的景况下,唯有匹配表达式的多少包才会被tcpdump处理。

Downloading Packages:
(1/2):
libpcap-1.4.0-1.20130826git2dbcaa1.el6.x86_64.rpm                               
| 130 kB     00:00
(2/2):
tcpdump-4.0.0-3.20090921gitdf3cb4.2.el6.x86_64.rpm                              
| 336 kB     00:00
[root@localhost ~]# rpm -qa|grep tcpdump
tcpdump-4.0.0-3.20090921gitdf3cb4.2.el6.x86_64

万一Tcpdump没有点名-c选项,它将持续捕获数据包,直到它被三个SIGINT信号(例如,通过输入中断字符,平日为control+c)或一个SIGTE翼虎M信号(经常由kill
(1)命令)中断。要是采用-c标志运转,它将捕获数据包,直到数据包数量到-c截至。

深远浅出的说,tcpdump是八个抓包工具,用于抓取网络上传输的数据包。
形象的说,tcpdump就好比是国家海关,驻扎在出入境的要道要道,凡是要入境和出国的集装箱,关员总要打开箱子,看看里面都装了点什么。
学术的说,tcpdump是一种嗅探器(sniffer),利用以太网的天性,通过将网卡适配器(NIC)置于混杂情势(promiscuous)来获取传输在网络中的消息包。
要用tcpdump抓包,请牢记,一定要切换到root账户下,因为只有root才有权力将网卡变更为“混杂情势”。

在支持SIGINFO信号的阳台上,比如多数BSD(包蕴Mac
OS X)和Digital / Tru64
UNIX,它会在接收到SIGINFO信号(例如,通过输入“status”字符
,经常是control-T,固然在某个阳台上,比如Mac OS
X,“status”字符暗中同意没有安装,所以您不可能不设置stty(1)才能采用它),并继承捕获数据包。

Linux作为互连网服务器,尤其是当做路由器和防火墙时,数据的募集和分析是不可或缺的。所以,明天我们就来看看Linux中无坚不摧的互连网数据收集分析工具——tcpdump。

 

显著为了安全起见,不用作网络管理用途的处理器上不应该运维这一类的互连网分析软件,为了挡住它们,能够屏蔽内核中的bpfilter伪设备。一般处境下网络硬件和TCP/IP堆栈不匡助接收或发送与本总计机非亲非故的数据包,为了接收那个数据包,就不可能不运用网卡的混杂形式,并绕过科班的TCP/IP堆栈才行。在FreeBSD下,那就要求内核援助伪设备bpfilter。因而,在基础中收回bpfilter援助,就能屏蔽tcpdump之类的互连网分析工具。并且当网卡被安装为混杂格局时,系统会在控制台和日志文件中留给记录,提醒管理员留意那台系统是还是不是被当作攻击同网络的别样电脑的跳板。

Tcpdump命令格式

vi /var/log/messages 当捕获包时,会运营在混合方式下,在日记中留下记录。


Sep 12 08:46:57 localhost kernel: device eth0 entered promiscuous mode
Sep 12 08:47:01 localhost kernel: device eth0 left promiscuous mode

tcpdump [
-AbdDefhHIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count
]

May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled

          [ -C
file_size ] [ -G rotate_seconds ] [ -F file ]

解释

          [ -i
interface ] [ -j tstamp_type ] [ -m module ] [ -M secret
]

总的的输出格式为:系统时间 来源主机.端口 > 目的主机.端口 数据包参数

          [ -P
in|out|inout ]

tcpdump能够分成三抢先八分之四内容,第贰是“选项”,第壹是“过滤表达式”,第③是“输出音讯”。

          [ -r
file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file
]

选项

          [ -W
filecount ]

tcpdump对截获的数目并不曾展开彻底解码,数据包内的绝抢先二分之一内容是利用十六进制的款型直接打字与印刷输出的。显明那不利于分析网络故障,经常的化解办法是先选择带-w参数的tcpdump截获数据并保留到文件中,然后再选拔任何程序(如Wireshark)实行解码分析。当然也理应定义过滤规则,以制止捕获的数量包填满全体硬盘。
-n     不把网络地址转换到名字;
-nn      不开始展览端口名称的更换。
-t        在输出的每一行不打字与印刷时间戳
-vv    输出详细的报文音讯;
-c     在接受钦定的包的数目后,tcpdump就会结束
-e    在输出游打字与印刷出多少链路层的头顶消息
-r    从钦定的文书中读取包(这几个包一般通过-w选项发生)
-w    直接将包写入文件中,并不分析和打字与印刷出来

          [ -E
spi@ipaddr algo:secret,…  ]

-X  直接解包内容

          [ -y
datalinktype ] [ -z postrotate-command ] [ -Z user ]

利用-A选项,则tcpdump只会来得ASCII情势的数目包内容,不会再以十六进制格局体现;
动用-XX选项,则tcpdump会从以太网部分就从头显示互联网包内容,而不是仅从互联网层协议初始突显。
利用-D选项,则tcpdump会列出全部能够挑选的抓包对象。
tcpdump -D
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.any (Pseudo-device that captures on all interfaces)
5.lo

          [
expression ]

-e选项的输出中,会发现有oui
Unknown的字样,那oui是哪些东东吗?在这边顺便科学普及一下咯:
OUI,即Organizationally unique
identifier,是“协会唯一标识符”,在其余一块网卡(NIC)中烧录的6字节MAC地址中,前二个字节展示了OUI,其注脚了NIC的创设公司。日常意况下,该标识符是唯一的。
-l选项的意义正是将tcpdump的出口变为“行缓冲”格局,那样能够保障tcpdump境遇的始末一经是换行符即将缓冲的内容输出到正规输出,以便于选取管道或重定向形式来展开持续处理。
显著,Linux/UNIX的标准I/O提供了全缓冲、行缓冲和无缓冲三种缓冲格局。标准错误是不带缓冲的,终端设备常为行缓冲,而任何境况私下认可都以全缓冲的。
世家在行使tcpdump时,有时会有那样的要求:“对于tcpdump输出的始末,提取每一行的首先个域,即”时间域”,并出口出来,为持续计算所用”,那种光景下,大家就要求选择到-l来将默许的全缓冲变为行缓冲了。
假如不加-l选项,那么只有全缓冲区满,才会输出一次,那样不光会造成出口是距离不顺手的,而且当你ctrl-c时,很或然会断到一行的46%,损坏总括数据的完整性。
做过互联网流量分析的同校,或者都有一个一同的需要,那就是“流量保存”和“流量重放”,那就刚刚对应了明日要上课的-w选项和-r选项。
“流量保存”正是把抓到的互连网包能存款和储蓄到磁盘上,保存下来,为延续使用。
“流量重播”正是把历史上的某临时间段的流量,重新模拟重放出来,用于流量分析。

纵然上面这么多参数望着都让人头疼,其实总计出来相当粗略:tcpdump
option filter,当中option表示选拔,而filter则意味过滤条件,你要对怎么进展过滤,filter能够是单个条件(tcp、src、host
xxx),也足以将那一个纯粹的参数实行重组,比如:dst port 3306 and src port
58895

表达式

 

能够因此手册页来详细阅读 #man  pcap-filter

Tcpdump选项

你会发现,过滤表明式大体可以分为三种过滤条件,“类型”、“方向”和“协议”,那三种规格的搭配组合就整合了笔者们的过滤表明式。


tcpdump  辅助正则表明式
tcpdump利用正则作为过滤报文的尺度,借使3个报文满意表达式的标准,则这一个报文将会被破获。假诺没有交给任何条件,则网络上装有的消息包将会被缴械。

-i 选项:表示tcpdump监听端口,如若不点名,那么会寻找全数的互联网接口

只怕你会咨询“为何那些协议里不曾应用层协议呢?”,其实理由极粗略,应用层协议非基础类互联网协议,平常会新增或淘汰,tcpdump不会浓密到应用层部分去智能分析。所以,你以往见到的tcpdump扶助的protocol都以应用层以下的。

~
]# tcpdump -i ens33            #
在ens33这几个网络接口监听

ether – 链路层协议
fddi – 链路层协议
tr – 链路层协议
wlan – 链路层协议
ppp – 链路层协议
slip – 链路层协议
link – 链路层协议

      
~ ]# tcpdump -i any               # linux
2.2上述援助 -i any,能够监听全数端口

tcpdump ‘tcp[tcpflags] & tcp-syn != 0 and not dst host qiyi.com’
tcpdump ‘ip[2:2] > 576’
tcpdump ‘ether[0] & 1 = 0 and ip[16] >= 224’

 

即proto [ expr : size]语法
expr用来钦赐数量报偏移量,表示从某些体协会议的数据报的第多少位开端提取内容,暗中同意的前奏地点是0;而size表示从偏移量的地点上马提取多少个字节,能够安装为① 、贰 、4。
设若只设置了expr,而从未安装size,则私下认可提取一个字节。比如ip[2:2],就象征提取出第壹 、伍个字节;而ip[0]则象征提取ip协议头的率先个字节。
在大家领到了一定内容之后,大家就要求安装大家的过滤条件了,我们可用的“相比较操作符”包括:>,<,>=,<=,=,!=,总共有6个。

-n 选项:不要把ip转换为主机名 

ip[0] & 0xf != 5
IP协议的第0-几位,表示IP版本号,能够是IPv4(值为0100)恐怕IPv6(0110);第6-八人表示首市长度,单位是“4字节”,若是首省长度为私下认可的20字节的话,此值应为5,即”0101″。ip[0]则是取那七个域的合体。0xf中的0x表示十六进制,f是十六进制数,转换到5位的二进制数是“0000
1111”。而5是一个十进制数,它转换来五位二进制数为”0000 0101″。
有了地点这个分析,大家应该能够很理解的通晓,那么些讲话中!=的左手部分便是领取IP包首县长度域,若是首参谋长度不等于5,就满意过滤条件。言下之意也算得,要求IP包的首部中富含可选字段。
世家兴许已经有所体会,在写过滤表明式时,你需求把共同商议格式完全背在脑子里,才能把表达式写对。可那对绝超越八分之四人来说,大概有点困难。为了让tcpdump工具更人性化一些,有一对常用的偏移量,能够经过一些称谓来取代,比如icmptype表示ICMP协议的类型域、icmpcode表示ICMP的code域,tcpflags则意味TCP协议的注明字段域。
更进一步的,对于ICMP的类型域,能够用那些名称具体指代:icmp-echoreply,
icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo,
icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob,
icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq,
icmp-maskreply。
而对于TCP协议的评释字段域,则足以细分为tcp-fin, tcp-syn, tcp-rst,
tcp-push, tcp-ack, tcp-urg。
倘使贰个过滤表明式有七个过滤条件,那么就供给选取逻辑符了,个中,!或not都能够表示“否定”,&&与and都得以象征“与”,而||与or都得以象征“或”。

~
]#tcpdump -i ens33 -n

关于ETHE君越的,能够参照《总计机网络协议海口赏析-以太网》;
至于IP的,能够参考《计算机网络协议西宁赏析-IP》;
至于TCP的,可以参见《总结机互联网协议常德赏析-TCP》;
关于UDP的,能够参照《计算机互联网协议邢台赏析-UDP》。

 

表明式中的关键字
首先种是关于项目标严重性字,首要总结host(默许),net,port
第三种是规定传输方向的要紧字,重要不外乎src,dst ,dst or src(私下认可), dst
and src 
其二种是协商的重大字,主要回顾fddi,ip,arp,rarp,tcp,udp等连串,默许是监听全部协议,Fddi指明是在FDDI(分布式光导纤维数据接口网络)上的一定的网络协议,实际上它是”ether”的外号,fddi和ether具有类似的源地址和目标地址,所以可以将fddi协议包当作ether的包举行拍卖和分析。除了这三种档次的重中之重字之外,别的首要的基本点字如下:gateway,
broadcast,less,
greater,还有两种逻辑运算,取非运算是 ‘not ‘ ‘!
‘;与运算是’and’,’&&’;或运算是’or’ ,’||’;
那些首要字可以组合起来构成有力的重组条件来满意人们的急需
上面举例表达
tcpdump host 192.168.2.101 -c 50 -nn -t
tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \) 
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
tcpdump tcp port 23 host 210.27.48.1

-w –挑选,-w为把内容write到有些地点,
-代表行业内部输出  也正是出口到标准输出中,上边是2个特级有用的命令,把包的数目,用字符呈现出来。

广泛表示方法

~
]# tcpdump -i ens33 -w – | strings   

host 192.168.2.10或者host com1

~
]# tcpdump -w test.cap                    #
把抓包结果写入test.cap中,方便wireshark分析

tcp port 10000,src host 192.168.2.10,

 

输出消息

-C num选项:假若test.cap 超越num大小,则新开二个文书,  -C fileSize , 单位是MB

“listening on eth0, link-type EN10MB (Ethernet), capture size 65535
bytes”
这一句表示大家监听的是透过eth0那么些NIC设备的互联网包,且它的链路层是依据以太网的,要抓的包大小限制是65535字节。
包大小限制值能够因此-s选项来安装,假设你要追求高品质,提议把那一个值调低,那样能够有效防止在大流量情状下的丢包现象。

~
]# tcpdump  -C 1  -w test.cap

尚未用-s参数钦命抓取数据的尺寸,接纳了私下认可长度为68或96字节;-s0则意味着没有长度的界定。

 

[root@aster5 ~]# tcpdump -nn host 117.136.25.196
tcpdump: verbose output suppressed, use -v or -vv for full protocol
decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

-r 选项: 从有些文件读取

[root@aster5 ~]# tcpdump -nn -s0 -c 50  host 117.136.25.196 -w 1007
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size
65535 bytes

~
]# tcpdump -n -r test.cap  

加-X的话,接下去正是IP包的始最后,是除了了以太网之后剩下的内容,当中左边古铜黑字体部分是十六进制内容,右边粉蟹灰字体部分是相应的ASCII码内容。

  

(1) 数据链路层头新闻
行任务令#tcpdump -e host ice
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
H219是一台装有SOLA酷威IC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条
一声令下的输出结果如下所示:
21:50:12.847509 eth0 ice.telnet 0:0(0) ack 22535 win 8760 (DF)
解析:21:50:12是展现的日子, 847509是ID号,eth0
表示从互联网接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它
标志是从源地址H219发来的数目包.
0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的
目标地址是ICE . ip 是评释该数据包是IP数据包,60 是数据包的长度,
h219.33357 > ice.
telnet 评释该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口.
ack 22535
标明对种类号是222535的包举行响应. win 8760声明发送窗口的分寸是8760.

-X 选料:以十六进制以及ASCII的样式打字与印刷数据内容。  

打印以太头代替暗中认可的ip头
tcpdump -e -nn
16:04:22.481164 e4:1f:13:80:ed:2b > 00:50:56:a1:5a:11, ethertype IPv4
(0x0800), length 322: 192.168.2.2.22 > 192.168.2.84.34559: P
2231088:2231344(256) ack 577 win 121 <nop,nop,timestamp 987621813
4054453550>
tcpdump -nn
16:05:42.390904 IP 192.168.2.2.22 > 192.168.2.84.34559: P
2169680:2169856(176) ack 913 win 121 <nop,nop,timestamp 987701722
4054533458>

~
]# tcpdump -X      

(2) A奥迪Q3P包的输出新闻

~
]# tcpdump -x     #
除了打印出header外,还打印packet里面包车型地铁多寡(十六进制的款式) 

[root@109-com1 asterisk]# tcpdump arp -enX
tcpdump: verbose output suppressed, use -v or -vv for full protocol
decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535
bytes
15:26:16.048727 00:50:56:a1:63:0d > Broadcast, ethertype ARP
(0x0806), length 60: Request who-has 192.168.2.85 tell 192.168.2.80,
length 46
        0x0000:  0001 0800 0604 0001 0050 56a1 630d c0a8 
………PV.c…
        0x0010:  0250 0000 0000 0000 c0a8 0255 0000 0000 
.P………U….
        0x0020:  0000 0000 0000 0000 0000 0000 0000      
…………..

~
]# tcpdump -xx   # 以十六进制的样式打字与印刷header, data内容

采纳命令#tcpdump arp
拿到的出口结果是:
22:32:42.802509 eth0 > arp who-has route tell ice
(0:90:27:58:af:1a)
22:32:42.802902 eth0 表明从主机发出该数据包, arp申明是
A卡宴P请求包, who-has route tell ice申明是主机ICE请求主机ROUTE的MAC地址。
0:90:27:58:af:1a是主机ICE的MAC地址。

 

18:56:23.790156 ARP, Request who-has 192.168.2.109 tell 192.168.2.10,
length 46
18:56:23.790165 ARP, Reply 192.168.2.109 is-at 00:50:56:a1:04:ea, length
28
18:56:27.279072 ARP, Request who-has 192.168.2.109 tell 192.168.2.210,
length 46
18:56:27.279087 ARP, Reply 192.168.2.109 is-at 00:50:56:a1:04:ea, length
28

– A 选项,把每1个packet都用于ASCII的情势打印出来

(3) TCP包的出口消息  tcp海口20字节  ip湖州也是20字节
用TCPDUMP捕获的TCP包的一般输出音信是:
src > dst: flags data-seqno ack window urgent options
src > dst:注明从源地址到指标地址, flags是TCP包中的标志消息,S
是SYN标志, F (F
IN), P (PUSH) , ENCORE (翼虎ST) “.” (没有标记);
data-seqno是数码包中的数额的顺序号, ack是
下次期望的顺序号, window是接到缓存的窗口大小,
urgent证明数据包中是或不是有时不我待指针.
Options是选项.

~
]# tcpdump -i ens33 -A host www.itshouce.com.cn   

18:48:22.036100 IP 192.168.2.109.22 > 192.168.2.80.52721: Flags
[P.], seq 120736:121008, ack 161, win 1002, length 272
18:48:22.037106 IP 192.168.2.109.22 > 192.168.2.80.52721: Flags
[P.], seq 121008:121184, ack 161, win 1002, length 176
18:48:22.037551 IP 192.168.2.80.52721 > 192.168.2.109.22: Flags
[.], ack 121184, win 256, length 0

 

(4) UDP包的出口新闻  udp秦皇岛8字节
用TCPDUMP捕获的UDP包的貌似输出新闻是:
route.port1 > ice.port2: udp length
UDP10分简练,下边包车型大巴输出游表明从主机ROUTE的port1端口发出的2个UDP数据包到主机
ICE的port2端口,类型是UDP, 包的长度是length

-c
#
 表示接到 # 个packet就退出

18:52:17.486689 IP 192.168.2.109.41608 > 192.168.2.10.40001: UDP,
length 180
18:52:17.486712 IP 192.168.2.109.42275 > 172.16.1.16.9012: UDP,
length 180

~
]# tcpdump -i ens33 -A -c 3  172.18.14.55         # 接收多少个包就淡出

样例

 

 

-D 采取:看脚下机械上有哪些网络接口

-c    计数
-e    链路头

~
]# tcpdump -D

默认    15:30:44.520640
-t    不出示时间戳
-tt    1429687801.082955
-ttt    00:00:00.000688        与上二遍时间作相比较
-tttt    2015-04-22 15:30:18.980728
-ttttt    00:00:00.000249        与第1行时间作相比

1.nflog
(Linux netfilter log (NFLOG) interface)

-v
-vv
-vvv

2.nfqueue
(Linux netfilter queue (NFQUEUE) interface)

-r file
-w file        Write the raw packets to file rather than parsing and
printing them out

3.usbmon1
(USB bus number 1)

in hex
-x    不包含链路层头
-xx    包含链路层头

4.usbmon2
(USB bus number 2)

in hex and ASCII
-X    不包罗链路层头
-XX     包含链路层头

5.ens33

 

6.ens34

tcpdump -i eth0 -n
tcpdump -i eth0 -nn -t -vv -c 500
tcpdump -i eth0  tcp -c 20  -t -nn -e

7.ens33 (Pseudo-device
that captures on all interfaces)

tcpdump -nn -X ‘port 1521’ -c 1

8.lo

只捕获100个syn包

 

tcpdump tcp [13] == 2 -nn -c 10

-e 分选:把连接层的头打字与印刷出来

tcpdump ‘tcp[13] & 2 == 2’ -nn -c 10

~
]# tcpdump -i ens33 -e

tcpdump ‘tcp[tcpflags] & tcp-push != 0’

16:49:14.658811
78:e3:b5:82:39:1b (oui Unknown) > 00:0c:29:66:59:95 (oui Unknown),
ethertype IPv4 (0x0800), length 60: 172.18.14.200.59324 > node1.ssh:
Flags [.], ack 40028648, win 2, length 0

[root@109-com1 asterisk]# tcpdump ‘tcp[tcpflags] &
(tcp-syn|tcp-fin) != 0’ -nn

 

[root@109-com1 asterisk]# tcpdump host 117.136.3.33 -nn
[root@109-com1 asterisk]# tcpdump host 192.168.2.215 and
\(117.136.25.199 or 117.136.25.141 \) -nn
[root@109-com1 asterisk]# tcpdump host 192.168.2.215 and not
117.136.25.199 -nn

-j
选项,修改时间格式  

[root@222-comecs ~]# tcpdump ‘ip[2:2] > 576’ -nn
[root@222-comecs ~]# tcpdump ‘icmp[icmptype] != icmp-echo and
icmp[icmptype] != icmp-echoreply’ -nn 

~
]# tcpdump -i ens33 -j timestamp type          #
能够修改出口的日子格式,

[root@222-comecs ~]# tcpdump -A -c 10  Handy for capturing web
pages.以ascii码显示,捕获web页面万分方便

~
]# tcpdump -J  

 

# 展现协理的年月格式 : List the
supported time stamp types for the interface and exit.  If the time
stamp  type  cannot  be  set  for  the interface, no time stamp types
are listed。

tcpdump
-nn  一般早晚要加-nn,那样不解析主机名与端口名,并且比较快,要是用tcpdump,不加任何参数,会不快。

 

[root@coreserv packet]# date           
Sat Mar 29 15:13:26 CST 2014
[root@coreserv packet]# tcpdump udp >cc
tcpdump: verbose output suppressed, use -v or -vv for full protocol
decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535
bytes

-l 慎选:把stdout
bufferd住,当您既想在显示屏上看结果,又想把结果输出到文件中时,相比较有用

1182828 packets captured
3063818 packets received by filter
1880979 packets dropped by kernel
[root@coreserv packet]# date
Sat Mar 29 15:15:29 CST 2014

~
]# tcpdump -l     

个中“captured”的计数指的是应用层捕获到的数目,“received by
filter”和“dropped by
kernel”的计数由基础维护,应用层通过getsockopt来拿到。收到2个包,“received
by
filter”会加1,固然sock的接收buffer被填满时,则把这一个数据包废弃,将“dropped
by kernel”加1。
透过调节/proc/sys/net/core/rmem_default和/proc/sys/net/core/rmem_max能够改变sk_rcvbuf的大小。
例行“captured”加上“dropped by kernel”应该等于“received by
filter”的高低,有的时候出现分裂的意况应当是还有一部分数目包在sk_rcvbuf中,还没有被应用层收到的由来。
透过调节发包速率,发包速率调慢,丢包率明显下跌。

#
能够协作tee命令,在荧屏上展现dump内容,并把内容输出到dump.log中,如下 

 

~
]# tcpdump -l |tee dump.log                               #
or上边那种写法

When tcpdump finishes capturing packets, it will report counts of:

~
]# tcpdump -l > dump.log &tail -f dump.log  

    packets “captured” (this is the number of packets that tcpdump
has received and processed);
    packets “received by filter” (the meaning of this depends on the
OS on which you’re running tcpdump, and possibly on the way the OS was
configured –

 

if a filter was specified on the command line,
on some OSes it counts packets regardless of whether they were matched
by the filter expression and, even if they were matched by the filter
expression, regardless of whether tcpdump has read and processed them
yet,
on other OSes it counts only packets that were matched by the filter
expression regardless of whether tcpdump has read and processed them
yet,
and on other OSes it counts only packets that were matched by the filter
expression and were processed by tcpdump);

-q 分选: 便是quiect output, 静默输出,尽量少的打字与印刷一些音信

    packets “dropped by kernel” (this is the number of packets that
were dropped, due to a lack of buffer space, by the packet capture
mechanism in the OS on which tcpdump is running, if the OS reports that
information to applications; if not, it will be reported as 0).

~
]# tcpdump -q

  tcpdump捕获包内容不全

 

在linux下用tcpdump抓取http数据包,之后用wireshark打开,发现数据包的内容是不全的
那时候,想分析和获得http包中的内容是不容许的,在图中能够发现,wireshark给出了“Packet
size limited during cap”的晋升,和:“HTTP
truncated”的提醒。这是怎么吗?
投机在实际中境遇的是以此颠倒是非提醒:packet size limited during capture:
JXTA truncated

-S 选项:打字与印刷真实的,相对的tcp seq
no

对此这些难题,贰个“海外朋友的MAIL中”给了13分好的解答,MAIL部分原著如下:
Maynard, Chris wrote:
“Packet Size limited during capture” tells me that the packet was bigger
than the snaplen set, so the packet was truncated when captured.  In
Wireshark, the snaplen is set in the capture options dialog using the
“Limit each packet to ___ bytes” option, and with dumpcap, tshark and
tcpdump it is set via the “-s ” option.  If not specified, tcpdump uses
a default snaplen of 68 (or 96, depending on the platform).

~
]# tcpdump -i ens33 -S

以此题材至关心重视要有两方面的原故:

 

1)在wireshark等包分析软件中,能够安装包的尺寸,假若不当恐怕回出现那些难点;
wireshark的安装如下图(在[Capture]—[Options]下配置):

-s 选型:钦点包大小,默许抓取包长度是65535,

澳门金沙国际 8

~
]# tcpdump                    # capture sieze 65535l

 

~
]# tcpdump -s  256        # 大家设置为256
该参数目标:减弱抓包文件的轻重

2)用Tcpdump进行抓包时,没有用-s参数钦点抓取数据的长短,选用了暗中认可长度为68或96字节;-s0则表示没有长度的限量。

 

[root@aster5 ~]# tcpdump -nn -s0 -c 50  host 117.136.25.196 -w 1007
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size
65535 bytes
50 packets captured
50 packets received by filter
0 packets dropped by kernel

-t 采取:不要打时间戳,

eth包头14字节
ip包头20字节
tcp包头20字节
udp包头8字节
 

~
]# tcpdump -i ens33 -t   

tcpdump -s0 -c 50 -nn host 222.91.97.126  -w 20001.pcap

 

tcpdump -s0 -c 50 -nn tcp port 10000 -w 10000.pcap
[root@84-monitor packet]# pwd
/root/packet
[root@84-monitor packet]# scp -P 8164
124.115.106.234:/root/10009.pcap ./
10009.pcap                                                                                                                     
100% 2943     2.9KB/s   00:00
[root@84-monitor packet]# scp 192.168.2.221:/root/10001.pcap ./
10001.pcap                                                                                                                
100%   12KB  12.1KB/s   00:00

-tt 选料:打出timstamp,从一九六六-1-1
以来的秒数,以及飞秒数。

~
]# tcpdump -i ens33 -tt   

 

-v 选取:verbose,即打字与印刷详细新闻。

~
]# tcpdump -i ens33 -v      # 打字与印刷出详细结果,如ttl值

~
]# tcpdump -i ens33 -vv    # 打字与印刷出越发详细的结果  如window,
checksum等

 

Tcpdump过滤项


上边全体测试中都有 -i ens33的选项,表示抓取ens33网络接口上的包,只是为着让测试方便。你可以钦点全体端口:-i
any。

# 抓取arp协议的包,然后host为192.168.199.*
 测试时供给在另一个session,做二个ifconfig指令。arp能够换为tcp,udp等。

~
]# tcpudmp -i ens33 -n arp host 192.168.199  

22:39:58.991043
ARP, Request who-has 192.168.199.125 tell 192.168.199.1, length
28

22:39:58.991059
ARP, Reply 192.168.199.125 is-at a4:5e:60:dc:d0:d9, length 28

 

# 抓取访问destination
80端口的包,然后我们做二个curl www.baidu.com的操作。

~
]# tcpdump -i ens33 -n dst port 80

22:53:06.041382
IP 192.168.199.125.63161 > 119.75.219.45.80: Flags [F.], seq 0, ack
1, win 65535, length 0

 

# 抓取源上端口是80的包

~
]# tcpdump -i ens33 -n src port 80     

22:57:48.343422
IP 112.80.248.73.80 > 192.168.199.125.63275: Flags [.], seq
38478:39918, ack 78, win 193, length 1440

 

# 抓取源或然指标端口都是80的包

~
]# tcpdump -i ens33 -n port 80    

22:58:51.165333
IP 112.80.248.74.80 > 192.168.199.125.63298: Flags [F.], seq
100439, ack 79, win 193, length 0

 

# 表示抓取destination prot
在1到80里头的端口的多寡

~
]# tcpdump -i ens33 -n dst portrange 1-80   

 

# 抓取源的端口是20-80的包

~
]# tcpdump -i ens33 -n src portrange 20-80  

 

# 抓取端口是20-80的包,不考虑源

~
]# tcpdump -i ens33 -n portrange 20-80  

   

# 抓取destination为www.baidu.com的包

~
]# tcpdump -i ens33 dst www.baidu.com    

#
在别的的session中ping www.baidu.com ,以及
在浏览器中做客www.baidu.com

# 抓取destination为192.168.14.55的包

~
]# tcpdump -i ens33 dst 192.168.14.55

 

# 抓取destination为192.168.1.[0-255]的包

~
]# tcpdump -i ens33 dst 192.168.1    # 也得以内定范围

 

# 抓取source为192.168.*.*的包,
使用-n 则只是为了显得ip,而不是主机名,

~
]# tcpdump -i ens33 -n src 192.168    

22:30:50.490355
IP 192.168.199.125.61086 > *.*.*.*.341: Flags [.], ack 56, win
8185, options [nop,nop,TS val 1239157627 ecr 1580310986], length
0

 

# 抓取192.168的包(不管是source还是destination
)

~
]# tcpdump -i ens33 -n host 192.168     

22:38:07.580567
IP *.*.*.*.34186 > 192.168.199.125.61086: Flags [P.], seq
787907565:787907668, ack 871423065, win 126, options [nop,nop,TS val
1580748123 ecr 1239593243], length 103

 

# 抓取包长度小于800的包

~
]# tcpudmp -i ens33 -n less 800

21:09:17.687673
IP 192.168.199.1.50150 > *.*.*.*.1900: UDP, length 385

# 抓取包长度当先800的包

~
]# tcpdump -i ens33 -n greater 800   

21:13:21.801351
IP 192.168.199.125.64826 > *.*.*.*.80: Flags [P.], seq
2155:3267, ack 44930, win 8192, length 1112

 

# 只抓取tcp包

~
]# tcpdump -i ens33 -n tcp   

1:21:18.777815
IP 192.168.199.125.50249 > *.*.*.*.443: Flags [.], ack 75, win
4093, options [nop,nop,TS val 1269008649 ecr 44997038], length
0

# 只抓取udp包

~
]# tcpdump -i ens33 -n udp  

21:22:48.434449
IP 192.168.199.1.50150 > *.*.*.*.1900: UDP, length 385

# 只抓取icmp的包,internet控制包

~
]# tcpdump -i ens33 -n icmp   

21:25:42.550374
IP 192.168.199.1 > 192.168.199.125: ICMP *.*.*.* unreachable –
need to frag (mtu 1480), length 556

相关文章