远程抓包的几种方式

远程抓包

远程抓包

环境

Linux环境

SSH抓包

网络转发

TCP监听转发

TCP直接转发

Windows环境

Wireshark内置远程抓包

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

网络设备

环境

远端系统为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 会发现接口下面有几略显奇怪的抓包方式,如下图:

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

注:其实windows版也是有这些插件的,wireshark 官方叫做excap,这里就不展开了,详见这里。

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

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

远端:

IP:192.168.135.139

OS:Win7

软件:安装WinPcap 并开启这个服务: Remote Packet Capture Protocol v.0 (experimental),该服务默认关闭。

近端/分析端:

windows系统,分析软件为wireshark,按照下图添加:

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

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

网络设备

网络设备抓包一般使用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封装。

参考1

参考2