远程抓包的几种方式

远程抓包

环境

远端系统为linux,一般使用tcpdump;
远端系统为windows,一般使用tshark(wireshark的命令行版本,包含在wireshark安装包中);
近端(分析端)为linux或者windows 一般使用wireshark作为分析器;
远程抓包最简单的就是本地抓包存储为文件,传到另一台电脑,不过这种实时性不佳;
下面几种方式为实时远程抓包,方便业务排障。

Linux环境

SSH抓包

将捕获数据直接输出到stdout/标准输出,管道给wireshark分析。

#系统linux 抓包工具为tcpdump
#这种方式并没有把shell切到远端,而是使用ssh执行命令的功能(不分配tty),此时管道后面为本地的wireshark;如果ssh登录进远端,shell切换进远端,管道后将会是远端的命令。
#此时不能使用-t开启交互,因为交互的数据也会发送给wireshark导致wireshark解析失败。

#root登录
ssh root@192.168.0.1 "tcpdump -i eth0 -l -w -" | wireshark -k -i -

#非root登录执行命令,tcpdump抓包需要root权限,使用非交互模式输入密码,同时建议屏蔽错误输出避免干扰。
ssh user@192.168.0.1 "echo 'password' | sudo -S tcpdump -U -i eth0 -l -w - 2>/dev/null" | wireshark -k -i -

网络转发

网络转发的基本原理就是把抓取的数据使用网络转发出去,常用工具为nc/ncat等,或者直接向/dev/tcp/[ip]/[port] 伪设备发送数据。

下面两种数据转发方式区别为:不同方向发起tcp会话,有防火墙或者NAT场景灵活选择。

TCP监听转发

#分析侧发起TCP会话

# -i 指定接口 -s 单包最大长度,为0代表默认的262144 -w - 代表std输出
# nc -l 监听 -p 端口
tcpdump -i eth0 -s0 -w - | ncat -l -p 9999

#本地从远程主机端口读取数据,管道给本地的wireshark
#wireshark -k 立即开始 -S 自动刷新 -i 接口   -i - 代表标准输入
ncat [remote ip] 9999 | wireshark -k -S -i -

TCP直接转发

#抓包侧发起TCP会话

#远端,抓包侧
tcpdump -i eth0 -s0 -w - > /dev/tcp/192.168.1.1/9999
#或使用nc转发
tcpdump -i eth0 -s0 -w - | ncat 192.168.1.1 9999

#近端,分析测,使用nc或者类似的工具均可
ncat -l -p 9999 | wireshark -k -i -

Windows环境

##远端为windows,命令和linux类似抓包工具换成Tshark##
#监听转发
tshark -i "本地连接* 1" -w - | ncat -l -p 9999
ncat 127.0.0.1 9999 | wireshark -k -S -i -
#直接转发
tshark -i USB-ETH1 -w - | ncat 127.0.0.1 9999
ncat -l -p 9999 | wireshark -k -S -i -

注意:操作系统环境下抓包要注意系统防火墙设置,尤其是监听转发方式。

Wireshark内置远程抓包

使用过Linux 版的 wireshark 会发现接口下面有几略显奇怪的抓包方式,如下图:
img
img
这个其实就是wireshark内置插件提供的(wireshark的插件接口叫做 extcap),部分插件提供了上文的类似功能;比如sshdump就是执行了类似上文中ssh抓包的命令(同样要求远端安装tcpdump);UDP Listener使用类似上述网络监听转发的方式,不同的是转发协议使用了UDP。

注:其实windows版也是有这些插件的,这里就不展开了,详见这篇文章

远程抓包协议(remote packet capture protocol)

这是一种专门用于远程抓包的协议,通常远端运行支持该协议的服务(例如 rpcapd),分析端通过该协议与远端连接进行抓包。例如:

远端:
IP:192.168.135.139
OS:Win7
软件:安装WinPcap 并开启这个服务: Remote Packet Capture Protocol v.0 (experimental),该服务默认关闭。
img
近端/分析端:
windows系统,分析软件为wireshark,按照下图添加:
img
img

此时在抓包接口列表中会出现类似下图的远端接口,而且会将远端的网络接口全部罗列出来;我测试的过程中上面的用户名和密码是需要填写的,就是windows系统的账号密码。

获取到网口命名有点烦,需要对照一下
img
img
img

网络设备

网络设备抓包一般使用SPAN/RSPAN/ERSPAN;SPAN(Switched Port Analyzer)是一种交换机的端口镜像技术,一般商用可管理的网络设备都支持,根据镜像口不同分为:

  • SPAN:基于接口镜像,将镜像数据通过接口传输
  • RSPAN:基于vlan镜像,将数据通过vlan传输
  • ERSPAN:基于隧道镜像,将数据通过隧道(GRE)传输

SPAN技术只是将数据镜像后引流,不具备抓包存储和分析能力,需要使用其他设备或软件进行抓包分析;

部分网络设备可能会也会内置抓包功能,这里有一个示例

下面使用H3C S6520X-EI演示SPAN技术:

#SPAN
#1 2两接口的双向数据镜像到3口,分析器在3口接收数据。
mirroring-group 1 local
mirroring-group 1 mirroring-port ten-gigabitethernet 1/0/1 ten-gigabitethernet 1/0/2 both
mirroring-group 1 monitor-port ten-gigabitethernet 1/0/3
interface ten-gigabitethernet 1/0/3
  undo stp enable

#RSPAN
#这个用的略少,这里不大幅贴命令了;提供链接供参考。
https://www.h3c.com/cn/d_202310/1947466_30005_0.htm#_Toc147921610


#ERSPAN
#将1口双向数据镜像到tunnel,分析器于远端1.1.1.1侧和2.2.2.2建立GRE隧道,镜像数据通过GRE隧道传输。
mirroring-group 1 local
mirroring-group 1 mirroring-port ten-gigabitethernet 1/0/1 both
mirroring-group 1 monitor-port ten-gigabitethernet 1/0/2 destination-ip 2.2.2.2 source-ip 1.1.1.1

#流镜像,流镜像其实就是上面三种镜像,不过使用过滤器仅保留关注的流量,减轻分析器的压力。
#镜像192.168.2.0/24访问互联网的WWW流量,以及192.168.2.0/24在工作时间发往192.168.1.0/24的IP流量。

time-range work 8:00 to 18:00 working-day

acl advanced 3000
  rule permit tcp source 192.168.2.0 0.0.0.255 destination-port eq www
  rule permit ip source 192.168.2.0 0.0.0.255 destination 192.168.1.0 0.0.0.255 time-range work
traffic classifier tech_c
  if-match acl 3000
traffic behavior tech_b
  mirror-to interface ten-gigabitethernet 1/0/3  
  #分析器在3接口接受数据,即SPAN模式
qos policy tech_p
  classifier tech_c behavior tech_b

interface ten-gigabitethernet 1/0/4
  #在连接网段的接口上配置
  qos apply policy tech_p inbound

ERSPAN抓包截图,这里是在分析端的物理接口上抓包的不是在tunnel抓包,所以可以看见外层的GRE封装。
img

参考1
参考2

posted @ 2024-03-20 16:37  bfhyqy  阅读(1037)  评论(0编辑  收藏  举报