linux 服务端抓包,服务端的抓包

如果不会在Linux命令行方式下抓包,永远不会成为服务端开发的高手;

当一个技术系统变得越来越庞大复杂的时候,用抓包的方式来掌握和理解其中的网络交互,就变得尤为重要;

抓包是掌握生产系统的一种方式,这种方式不依赖于具体的业务逻辑

最近发现身边很多Java程序员和PHP程序员不会在服务器上抓包,还是蛮吃惊的,这里结合多年的经验,讲解如何在服务器上抓包

1. Problem

这里列举几个典型的技术问题,这些问题使用其他方法比较难以解决,或者解决的效率比较低,但是使用抓包的方式就可以很好的处理。

1.1 后端系统间的通讯可靠性

假设两个后端系统A和B,A发了一个请求给B,但是B没有收到。A系统的业务日志显示已经发送请求,但是B系统的业务日志却没有收到相关请求的日志,如何定位问题

假如这个问题不是必现,而是偶尔出现,又该如何解决

1.2 如何确定请求方

有的时候,一个技术系统会突然收到很多莫名的请求,这些请求占用了蛮多的服务器资源,如何确定请求来自于哪里

2. Solution

在服务器上抓包,观察网络流可以解决上述问题,常用的抓包命令如下:

root@:~# tcpdump -iany -Xn -s0 port 443

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes

17:04:11.888152 IP 36.24.158.122.27603 > 10.133.206.234.https: Flags [S], seq 608876073, win 65535, options [mss 1412,nop,wscale 6,nop,nop,TS val 286050563 ecr 0,sackOK,eol], length 0

0x0000: 4500 0040 0000 4000 3306 abb6 2418 9e7a E..@[email protected]...$..z

0x0010: 0a85 ceea 6bd3 01bb 244a b629 0000 0000 ....k...$J.)....

0x0020: b002 ffff 7918 0000 0204 0584 0103 0306 ....y...........

0x0030: 0101 080a 110c c903 0000 0000 0402 0000 ................

0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................

17:04:11.888235 IP 10.133.206.234.https > 36.24.158.122.27603: Flags [S.], seq 539909370, ack 608876074, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0

0x0000: 4500 0034 0000 4000 4006 9ec2 0a85 ceea E..4..@.@.......

0x0010: 2418 9e7a 01bb 6bd3 202e 5cfa 244a b62a $..z..k...\.$J.*

0x0020: 8012 7210 9c28 0000 0204 05b4 0101 0402 ..r..(..........

0x0030: 0103 0307 0000 0000 0000 0000 0000 0000 ................

0x0040: 0000 0000 ....

2.1 tcpdump的工作原理

当网卡收到一个网络报文后,会将该报文发给所有能处理该报文的网络协议模块来进行解析处理。tcpdump通过注册一种虚拟的底层网络协议来获得对相关报文的处理权,同时将报文完整的复制一份,根据用户的过滤条件和展示选项进行报文的处理。

2.2 tcpdump常用选项

-i: 选定网卡的interface进行抓包,可取值为any(所有接口)、eth0(eth0接口)等

-n: 不要对主机名进行解析,即直接显示IP地址

-nn: 不要对主机名和端口进行解析,即直接显示IP地址和数字形式的端口号

-X: 抓到的包展示内容的时候,既包括Hex的样式,也包括ASCII码的样式

-s: 对每一个抓到的包,限制包的大小(以字节为单位):-s0表示不限制大小,全部抓取和展示,-s 128 表示展示128个字节

2.3 tcpdump常用的过滤表达式

在一个繁忙的服务器上抓包的时候,会有大量的traffic,为了过滤出来你关心的报文,经常使用Expression进行过滤。

host: 对主机进行过滤,host后面跟服务器的IP,比如host 192.168.100.1表示只抓取源IP或者目的IP为192.168.100.1的报文

port: 对端口进行过滤,port后面跟服务器的端口号,比如port 80表示只抓取源端口号或者目的端口号为80的报文

src和dst: 这两个用户控制网络流的方向过滤,比如dst port 80表示只抓取目的端口号为80的报文,src ip 192.168.100.1表示只抓取源IP为192.168.100.1的报文

将过滤条件进行组合

可以使用and or not和小括号(需要\来转义)来组合过滤条件,如下所示:

tcpdump -iany -Xn -s0 port 443 and \( not host 192.168.100.1 or host 192.168.100.2 \)

2.4 将tcpdump抓到的包保存到文件上

可以将tcpdump抓到的包保存到文件上,格式可以是二进制的(PCAP格式,可以下载到Windows用wireshark打卡),也可以是文本格式。

举例A. 将tcpdump抓到的包以二进制形式保存到文件上,使用-w选项

tcpdump -iany -Xn -s0 port 443 -w /tmp/aaa.pcap

举例B. 将tcpdump抓到的包以文本形式保存到文件上,使用重定向

tcpdump -iany -Xn -s0 port 443 > /

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值