超详细的网络抓包神器 tcpdump 使用指南( 三 )


  • [S] : SYN(开始连接)
  • [.] : 没有 Flag
  • [P] : PSH(推送数据)
  • [F] : FIN (结束连接)
  • [R] : RST(重置连接)
而第二条数据的 [S.] 表示 SYN-ACK , 就是 SYN 报文的应答报文 。
4. 例子下面给出一些具体的例子 , 每个例子都可以使用多种方法来获得相同的输出 , 你使用的方法取决于所需的输出和网络上的流量 。我们在排障时 , 通常只想获取自己想要的内容 , 可以通过过滤器和 ASCII 输出并结合管道与 grep、cut、awk 等工具来实现此目的 。
例如 , 在抓取 HTTP 请求和响应数据包时 , 可以通过删除标志 SYN/ACK/FIN 来过滤噪声 , 但还有更简单的方法 , 那就是通过管道传递给 grep 。在达到目的的同时 , 我们要选择最简单最高效的方法 。下面来看例子 。
提取 HTTP 用户代理从 HTTP 请求头中提取 HTTP 用户代理:
$ tcpdump -nn -A -s1500 -l | grep "User-Agent:"复制代码通过 egrep 可以同时提取用户代理和主机名(或其他头文件):
$ tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'复制代码只抓取 HTTP GET 和 POST 流量抓取 HTTP GET 流量:
$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'复制代码也可以抓取 HTTP POST 请求流量:
$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'复制代码注意:该方法不能保证抓取到 HTTP POST 有效数据流量 , 因为一个 POST 请求会被分割为多个 TCP 数据包 。
上述两个表达式中的十六进制将会与 GET 和 POST 请求的 ASCII 字符串匹配 。例如 , tcp[((tcp[12:1] & 0xf0) >> 2):4] 首先会确定我们感兴趣的字节的位置(在 TCP header 之后) , 然后选择我们希望匹配的 4 个字节 。
提取 HTTP 请求的 URL提取 HTTP 请求的主机名和路径:
$ tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytesPOST /wp-login.php HTTP/1.1Host: dev.example.comGET /wp-login.php HTTP/1.1Host: dev.example.comGET /favicon.ico HTTP/1.1Host: dev.example.comGET / HTTP/1.1Host: dev.example.com复制代码提取 HTTP POST 请求中的密码从 HTTP POST 请求中提取密码和主机名:
$ tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes11:25:54.799014 IP 10.10.1.30.39224 > 10.10.1.125.80: Flags [P.], seq 1458768667:1458770008, ack 2440130792, win 704, options [nop,nop,TS val 461552632 ecr 208900561], length 1341: HTTP: POST /wp-login.php HTTP/1.1.....s..POST /wp-login.php HTTP/1.1Host: dev.example.com.....s..log=admin&pwd=notmypassword&wp-submit=Log+In&redirect_to=http%3A%2F%2Fdev.example.com%2Fwp-admin%2F&testcookie=1复制代码提取 Cookies【超详细的网络抓包神器 tcpdump 使用指南】提取 Set-Cookie(服务端的 Cookie)和 Cookie(客户端的 Cookie):
$ tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytesHost: dev.example.comCookie: WordPress_86be02xxxxxxxxxxxxxxxxxxxc43=admin%7C152xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfb3e15c744fdd6; _ga=GA1.2.21343434343421934; _gid=GA1.2.927343434349426; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_86be654654645645645654645653fc43=admin%7C15275102testtesttesttestab7a61e; wp-settings-time-1=1527337439复制代码抓取 ICMP 数据包查看网络上的所有 ICMP 数据包:
$ tcpdump -n icmptcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes11:34:21.590380 IP 10.10.1.217 > 10.10.1.30: ICMP echo request, id 27948, seq 1, length 6411:34:21.590434 IP 10.10.1.30 > 10.10.1.217: ICMP echo reply, id 27948, seq 1, length 6411:34:27.680307 IP 10.10.1.159 > 10.10.1.1: ICMP 10.10.1.189 udp port 59619 unreachable, length 115复制代码抓取非 ECHO/REPLY 类型的 ICMP 数据包通过排除 echo 和 reply 类型的数据包使抓取到的数据包不包括标准的 ping 包:
$ tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes11:37:04.041037 IP 10.10.1.189 > 10.10.1.20: ICMP 10.10.1.189 udp port 36078 unreachable, length 156复制代码


推荐阅读