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

阅读: 评论:0

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

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..@..@.3...$..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 > /

本文发布于:2024-01-29 09:56:21,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170649338414474.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:服务端   linux
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23