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过源地址和方针地址来过滤
假定你只需要获取一个方向的流量,可以运用 src
和 dst
来限制方向:
$ 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 ~
, udp
, icmp
或许其他的协议:
$ 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 <t 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'
总结
下面是一些考虑:
- tcpdump 关于任何希望进入网络或信息安全领域的人来说都A O V D r d w * =是一个有价值} [ P % ^ – k的东西
- 它有可以与流量交互的直接接口,加上它在查看数据包方面供应的精确性,它或许是学习TCP/IP最好的东西
- 像 Wireshark 这样的东西尽管也很棒,但是假定你想实在把握数据包的结构,你有) 5 ] & + v ^ J必要先学会 tcpdump
这篇初级教程应该能让你能开端运用 tcpdump,但是关于@ ? I z t其他更多的运用场景,仍是要查阅手册。我希望这对你有用,假定你有任何问题,请随时联络我。
原文地址:danielmiessler.com/study/tcpdu…
注重微信公T m / % n E D c众号,聊点其他的