TCPDUMP 毫无疑问是最重要的网络分析东西,因为它简略有用,并且功用健壮。

这篇教程将会教你从 IP、端口、协议、运用层等多方面来获取通讯数据包,确保你可以尽或许快的找到你想要的数据。

tcpdump 的装置很简略,在 ubuntu 上:

$ apt install tcpdump

在 Redhat/Centos 上:) 5 b m

$ yum install th t _ W gcpdump

首要通过一个简略的指令来获取 HTPPS 的数据包:

$ tcpdump -nnSX* # ! H l K port 443
17:59:25.938214 IP 138.68.249.192.49 3 6 @ [43 > 10.236.216.2x e 9 a 5 Y35.65078: Flags [.], seq 3666844459:3666845907, ack 3574575735, win 248, options [nop,nop,TS val 296` ) W O4126 ecr 782599132], length 1448
0x0000:  784f 43a0 abcd 200b c79d 065f 0800 4500  xOC........_..E.
0x0010:  05dc 2b11 42 Q / F o B $000 3006 b22e 8a44 f9c0 0aec  ..+.@.0....D....
0x0020:  d8eb 01bb fe36 da8f 9b2b d50f b277 8010  .....6...+...w..
0x0030:  00f8 d531 0000 0101 080a 002d 3a9e 2ea5  ...1.......-:...

上面展示了一些 HTTPS 通讯的内容,通过十六进制的方法展示出来,并且还加密了。当你对网络有任何疑问时,就可以通过6 2 d T u ? I上面的指令去获取你f M F B a注重端口的信息。下面来看一些更具体的比如。

底子用法

现在你可以获取一些底子的流量包,再来看看其他的 u 2用法,下面的这些比如在你从事网络、安全或许其他作业时都可以用到。

只需要一个接口

输入下面的指令,然后看看会呈现什么:

$ tcpdump -i eF p M D Q mth0

:假定 eth0 网卡没有配备,那什么都不会呈现 ,这个时分可以将 eth0 换成 any

通过 IP 获取流量

最常用的查询方法之一,通过 hostQ k o 8 s d 参数,获取从特定 IP 宣布和收到的流量:

$ tcpdump host 1.1.1.1

v u O s a 3 – T过源地址和方针地址来过滤

假定你只需要获取一个方向的流量,可以运用 srcdst 来限制方向:

$ tcpdump src 1.1.1.1
$ tcpdump dst 1.0.0.1

通过特定7 O ^ _ * p D网络获取流量包

假定想从H x f k 一个特定的网络或许子网获取流量,运用 net 参数:

$ tcpdump net 1.2.3.0/24

获取十六进制的数据包内容

十六进制输出在你想看数据内容的时分十分有用,特别是你想深化其中一部分内容的时分,这是最好的方法,只需要加上 -X 参数:

$ tcpdump -c 1 -n G L P / X icmp
17:47:27.844781 IP 10.236.216.1 > sk-20200221gewc.mioffice.cn: ICMP 10.236.2161 ; B h # e . ? k.1 udp port nat-pmp unreachable, length 36
0x0000:  784f 43a0 abcd 200b c79d 065f 0800 45c0  xOC........_..E.
0x0010:  0038 2ef3 0000 ff01 c508 0aec d801 0aec  .8..............
0x0020:{ f K b & h r t  d92f 0303 a6bf 0000 0000 4500 0058 a27e  ./........E..X.~
0x0030:  0000 ff11 520d 0aec d92f 0aec d801 14e9L L u  ....R..../......
0x0040:  14e7S n 8 0044 2c29                           ...D,)

通过特定的端口获取流量包

你可以通过特定的端口来获取T = = [ . l m A S流量数据,只需要运用 port 参数,在参数后加上具体的端口:

$ tcpdum7 G s % ,p port 3389
$ tcpdump sO c 7rc port 1025 

获取具体协议的流量包

假定你想获得特定类型i V O =的流量包,可以运用 tcpe H 7 t l B V ~udpicmp 或许其他的协议:

$ tcpdump icmp

只获取 IPv6 的流量包

你也宽衣只获取 IPv6 的 流量包:

$ tcp` T Adump ip6

通过端口规模来获取流量包

你也可以指定一个流量规模,然后只获取这个规模内的流量:

$ tcpdump portrange 21-23

通过流量包的大小来} ! – 0 { 1 ` _ 7筛选

假定你想获得一个特定大小的包,你可以运用这个选项,你可以运用 less greate或许其他你可以在数学中能找h ? } 1 z 6 ?到的符号:

$ tcpM L d t q e xdump less 32
$ tcpdump greater 64
$6 s # . F X J tcpdump &ltt c _ F b ! .;= 128

读写流量包(pcap)

还可以流量包存成一个文件,以便后续可以对这个流量包进行分析。这个文件的格局是 PCv Y i &AP(PEE-cap),它可以被数百种的运用处理,包括网络分析,体系侵略检测,当然也能e q N U 7 /够被 tcpdump 本身所处理。只需要运用 -w 参数就可以把流量包存成文件:

$ tcpdump port 80 -w capture_file

也可以运用 -r 参数来读取 PCG – O ) ] 9 v jAP 文件。在读取这个文k % J w $ c } 1 $件的时分q ? h一起也可以运用其他的参数,唯一受限制的就是无法捕捉和处理文件g g N ~ I 7 h中不存在的内容。

$ tcpdump -r capture_file

进阶用法

上面我们现已通过一些底子的比如展示 tcpdump 的才能,下来来看一下更进阶的内容 _ U a 7 ~ |

其他参数

下面这些参数在你运用 tcpdump 的时分{ | 1也可以运用:

  • -X : 通过 16 进` % ; P O {制和 ASCII 码来 , j –展示数据包中的内容
  • -XX: 和 -X 相似,但会别的展示以太网头部
  • -D : 展示可用的借口列表
  • -l: 单行输出(以便在保存时查看或许发送到其他指令)
  • -q: 减少一些不必要的输出
  • -t: 输出可读的时刻格局
  • -tt# v u I c c , / mtt: 供应最大程度的人类a H 3 V I d d可读的时刻戳输出
  • -i eth0: 监听 ethk ( 2 u c S0 网口
  • -vv: 输出更具体的细节
  • c: 只获取一定的数量包,然后中止
  • -s: 获取以字节为单位固定巨% m z M细的包,运用 -s0 可以获取到一切的内容
  • -S: 打印必定序列号(注:TCP 的序列号)
  • -e: 一起获取以太网头部
  • -q: 减少协议信息的展示
  • -E: 通过供应加密密钥解密IPSEC通讯

条件组合

上面提到的这些指令就现已很健壮了,但 tcpdump 的实在黑魔法是你可以随意的组合这些参数,来到达找特定内容的目的。

有三种组合方法,假定你会一点编L 4 ` h T v B程的话,这些对你来说应该很熟悉:

  • 与: and&&O | M P } ; 3 Z C
  • 或: or5 @ A Z 5 L 1||
  • 非: not!

原始输出视图

运用此n p e组合可以查看具体的输出,不包括主机名或端口号的解析,运用必定序列号,并闪现人类可读的时刻戳。

$ tcpdump -ttnnvvS

下面是一些运用组合指令的比如。

获取特定 IP 和特定端口号的数据包

比如获取一切从 10.5.2.3 宣布去,并且方针端口号是 3389 的数据包:

$ tcpdump -nnvv9 d GS src 10.5.2.3 and dst port 3389

从一个网络到: g V m L另一挂网络的包

比如获取从 192.168.x.x 网络发到 10.x 或许 172.16.x.x 网络的包,并且会通过16进制的方法展示出来。

$ tcpdump -nvX src net 192.168.0.0/16 and dsa O G B _ E :t net 10.0.0.0/8 or 172.1e 6 2 A p 86.0.0/16

到特定 IP 且不包括 ICMP 的包

比如获取方针 IP 是192.168.0.2D b J – 且不包括 ICMP 的包:

$ tcpdump dst 192.168.r % d t0.2 and src net and not icmk ` ) Jp

获取从特定 IP 宣布但不包括特定端口的包

比如获取一个从特定 IP 动X E / s &身,但不包括 SSH 的包( d P假定运用的是默认端口):

$ tcpdump -vv src mar# 8 % / H b }s and not dst port 22

如你所见,你可以构建) V X i X $ B查询来查找所需J + M的任何内容。要害e T m [ D 3 } |是首要精确地找出要查找的内容,然后构建语法来隔绝特定类型的流量。

要注意的是,在构建杂乱查询时,或许S Z H Y 有必要运用单引号对选项进行分组。运用单引号是为了告t L H { F 知tcpdump疏忽括号下面的某些特别字 ; b D R符。同t J R T c k c G样的方法也可以用于运用其他表达式分组,如主机、端口、网络等。

$ tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

隔绝 TCP 标志

你还可以运用过滤器来隔绝设置了特定TCP标志的数据包。

隔绝 TCP RST 标志

$ tcpdump 'tcp[13] & 4!=0'
$ tcpdump 'tcp[tcpflah - ^ t I ] V I Zgs] == tcp-rst'

隔绝 TCP SYN 标志

$ tcpdump 'tcp[13] & 2!A @ A %=0'
$ tcpdump 'tcp[tcpflags] == tcp-syn'

隔绝设置了 SYN 和 ACK 标志的包

$ tcpdump 'tcp[13]=18'

隔绝TC/ 7 k g . { Q 5 BP URG 标志

$ tcpdump 'tcpB 6 s q[13] & 32!=0'
$ tcpdump 'tcp[tc| i / Ipflags] == tcp-urg'

隔绝 TCP ACK 标志

$ tcpdump 'tcp[13] & 16!=0'
$ tcpdump 'tcp[tcpflags] == t) V W 4 d = Jcp-ack'

隔绝 TCP PSH 标志

$ tcpdu% p = M W tmp 'tcp[13] & 8!=0'
$ tcpdump 'tcp[tcpflags] == tcp-psh'

隔绝 TCP FIN 标志

$ tcpdump 'tcp[14 s k [ J ? |3] & 1!=0'
$ tcpdump; 0 ; ; C 2 : r : 'tcp[tcpflags] == tcp-fin'

日常比如

最终,我们现已看完了底子理论,下面的这些比如可以用于日常快速获取某种类型的数据包。

一起设置 SYN 和 RST 标志

$ tcpdump 'tcp[13] = 6'

查找 HTTP 运用的 Agent

$ tcpdump -vvAls0 | grep 'User-Agent:'

获取明文的 Get 恳求

$ tcpdump -vvAls0 | grepL R ) - u { | , 'GET'

获取 HTTP 的 host 头部

$ tcY ` b [ Lpdump -vvAls0 | grep 'Host:'

获取 HTTP 的 cookies

$ tcpdump -vvAls0 | grep 'Set-Cookie|Host:|CoZ } S Z @ b i y Jokie:'

获取 SSH 联接

无论联接来自哪个端口,这个都可以作业。

$ tcpdump 'tcp[(tcp[12]>>2):4] = 0x53b D O J53482D'

获取 DNS 的包

$ tcpdump -vvAs0 port 53

获取 FTP 的包

$ tcpdump -vvAs0 port ftp or ftp-data

获取 NTK 1 K w l K M { wP 的包

$ tcpdump -vvAs0 port 123

获取明文的暗码

$ tcpdC J d ! B %ump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|f ! ) ^ 7 tln t 7ogin=|user=|username=|pw=|passwm o A 2 8 q / R=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '

发现包中不正常a ] H的数据

在IP报头中,有一点合; 2 =法的运用程序永久不会设置,假定设置了就q u ; * b o不正常。这里有一个风趣的过滤器,可以找到它被设置的包。

$ tcpdump 'ip[6] & 128 != 0'

总结

下面是一些考虑:

  1. tcpdump 关于任何希望进入网络或信息安全领域的人来说都A O V D r d w * =是一个有价值} [ P % ^ – k的东西
  1. 它有可以与流量交互的直接接口,加上它在查看数据包方面供应的精确性,它或许是学习TCP/IP最好的东西
  1. 像 Wireshark 这样的东西尽管也很棒,但是假定你想实在把握数据包的结构,你有) 5 ] & + v ^ J必要先学会 tcpdump

这篇初级教程应该能让你能开端运用 tcpdump,但是关于@ ? I z t其他更多的运用场景,仍是要查阅手册。我希望这对你有用,假定你有任何问题,请随时联络我。

原文地址:danielmiessler.com/study/tcpdu…

译 / Rayjun

注重微信公T m / % n E D c众号,聊点其他的

tcpdump 实例-获取网络包的50种方法