Windows抓包与网络分析工具总结

1.  前言

以下主要对Windows环境、Linux环境及Java程序的网络分析相关工具进行分析,主要包括网络连接查看、网络包捕获等。

相关内容如下:

Windows抓包与网络分析工具总结:https://blog.csdn.net/a82514921/article/details/104609924

Linux抓包与网络分析工具总结:https://blog.csdn.net/a82514921/article/details/104616502

Java程序网络连接分析方法总结:https://blog.csdn.net/a82514921/article/details/104616519

iptables模拟网络连接问题并分析:https://blog.csdn.net/a82514921/article/details/104616548

2.   Windows环境

2.1  netstat

2.1.1  netstat说明

Windows的netstat命令用于显示协议统计和当前 TCP/IP 网络连接。

在cmd命令窗口中执行netstat -?查看选项如下:

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]

 

  -a            显示所有连接和侦听端口。

  -b            显示在创建每个连接或侦听端口时涉及的可执行程序。

                在某些情况下,已知可执行程序承载多个独立的

                组件,这些情况下,显示创建连接或侦听端口时涉

                及的组件序列。此情况下,可执行程序的名称

                位于底部[]中,它调用的组件位于顶部,直至达

                到 TCP/IP。注意,此选项可能很耗时,并且在您没有

                足够权限时可能失败。

  -e            显示以太网统计。此选项可以与 -s 选项结合使用。

  -f            显示外部地址的完全限定域名(FQDN)。

  -n            以数字形式显示地址和端口号。

  -o            显示拥有的与每个连接关联的进程 ID。

  -p proto      显示 proto 指定的协议的连接;proto 可以是下列任

                何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s 选

                项一起用来显示每个协议的统计,proto 可以是下列任

                何一个: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP

                或 UDPv6。

  -r            显示路由表。

  -s            显示每个协议的统计。默认情况下,显示

                IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6

                的统计;-p 选项可用于指定默认的子网。

  -t            显示当前连接卸载状态。

  interval      重新显示选定的统计,各个显示间暂停的间隔秒数。

                按 CTRL+C 停止重新显示统计。如果省略,则 netstat

                将打印当前的配置信息一次。

2.1.2  常用选项

l  -a

-a选项显示所有连接和侦听端口,当不指定-a选项时,不会显示状态为LISTENING及协议为UDP的连接信息。

l  -b

使用-b选项可以显示每个连接对应的进程信息,可能需要足够的权限。

l  -n

-n选项使用数字形式显示连接对应的地址与端口。

当不使用-n选项时,地址可能以主机名形式显示,端口可能以协议名称形式显示,如“localtest:http”。

当使用-n选项时,地址会显示为数字形式的IP,端口也以数字形式显示,如“127.0.0.1:80”。

l  -o

-o选项可以显示连接对应的进程PID。

2.1.3  使用示例

在cmd命令窗口中执行“netstat -abno”,结果如下:

活动连接

 

  协议  本地地址          外部地址        状态           PID

  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       932

  RpcSs

 [svchost.exe]

  TCP    0.0.0.0:5985           0.0.0.0:0              LISTENING       4

 无法获取所有权信息

  TCP    0.0.0.0:6781           0.0.0.0:0              LISTENING       4

 无法获取所有权信息

  TCP    0.0.0.0:8064           0.0.0.0:0              LISTENING       7760

 [tencentdl.exe]

  TCP    0.0.0.0:28511          0.0.0.0:0              LISTENING       1584

 [HDPCommunication.exe]

  TCP    0.0.0.0:28521          0.0.0.0:0              LISTENING       4

2.1.4  执行结果过滤

可使用findstr命令对netstat命令的执行结果进行过滤。

例如只显示ESTABLISHED状态的连接,执行“netstat -ano|findstr ESTABLISHED”,执行结果示例:

  TCP    127.0.0.1:28511      192.168.0.1:45884      ESTABLISHED     1584

2.2  Get-NetTCPConnection

2.2.1  PowerShell说明

Windows PowerShell 是专门为系统管理员设计的 Windows 命令行 Shell。 Windows PowerShell 包括可以单独或组合使用的交互提示和脚本编写环境。

PowerShell的说明见“Getting Started with Windows PowerShell”(https://docs.microsoft.com/en-us/powershell/scripting/getting-started/getting-started-with-windows-powershell?view=powershell-6 )。

从Windows 7、Windows Server 2008开始,支持PowerShell,可查看“Windows PowerShell System Requirements”( https://docs.microsoft.com/zh-cn/powershell/scripting/install/windows-powershell-system-requirements?view=powershell-6 )。

在“运行”中输入powershell可打开PowerShell命令窗口;或在进入cmd命令窗口后,执行powershell命令进入。

在cmd命令窗口中执行“powershell [powershell命令]”,可以执行PowerShell中的命令。

执行PowerShell命令时,支持使用TAB提示命令自动补全。

2.2.2  Get-NetTCPConnection说明

Get-NetTCPConnection是PowerShell中的命令,可以查看TCP连接属性,例如本地或远程IP地址,本地或远程端口以及连接状态。

Get-NetTCPConnection的说明见https://docs.microsoft.com/en-us/powershell/module/nettcpip/get-nettcpconnection?view=win10-ps

使用说明:

Get-NetTCPConnection

   [[-LocalAddress] <String[]>]

   [[-LocalPort] <UInt16[]>]

   [-RemoteAddress <String[]>]

   [-RemotePort <UInt16[]>]

   [-State <State[]>]

   [-AppliedSetting <AppliedSetting[]>]

   [-OwningProcess <UInt32[]>]

   [-CreationTime <DateTime[]>]

   [-OffloadState <OffloadState[]>]

   [-CimSession <CimSession[]>]

   [-ThrottleLimit <Int32>]

   [-AsJob]

   [<CommonParameters>]

可在PowerShell命令窗口中执行Get-NetTCPConnection命令,或在cmd命令窗口中执行“powershell Get-NetTCPConnection”。

在PowerShell版本为5.1.15063.786的Windows 10操作系统中,可以执行Get-NetTCPConnection命令;在PowerShell版本为2.0的Windows 7操作系统中,不存在Get-NetTCPConnection命令。

2.2.3  使用示例

在PowerShell命令窗口中执行Get-NetTCPConnection,结果如下(与netstat结果类似):

LocalAddress LocalPort RemoteAddress RemotePort State       AppliedSetting

------------ --------- ------------- ---------- -----       --------------

::1          49898     ::            0          Listen

0.0.0.0      59023     0.0.0.0       0          Bound

127.0.0.1    59023     192.168.0.1   80         Established Internet

127.0.0.1    59008     192.168.0.1   8080       TimeWait

在执行Get-NetTCPConnection命令时,使用-LocalAddress、-LocalPort、-RemoteAddress、-RemotePort、-State参数,可根据本地地址、本地端口、远程地址、远程端口、状态对输出结果进行过滤,详情见Get-NetTCPConnection说明

示例如下:

命令

说明

Get-NetTCPConnection -LocalAddress "0.0.0.0"

只查看本地地址符合的连接

Get-NetTCPConnection -LocalPort 135

只查看本地端口符合的连接

Get-NetTCPConnection -RemoteAddress "0.0.0.0"

只查看远程地址符合的连接

Get-NetTCPConnection -RemotePort 80

只查看远程端口符合的连接

Get-NetTCPConnection -State listen

只查看连接状态符合的连接

Get-NetTCPConnection -OwningProcess 4

只查看特定进程(PID)的连接

2.3  TCPView

2.3.1  Sysinternals说明

Windows Sysinternals是一个提供技术资源和实用工具的网站,用于管理,诊断,排除故障和监视Microsoft Windows环境。由Winternals公司开发,Winternals公司已被微软收购。

相关说明见https://en.wikipedia.org/wiki/Sysinternals

可从以下地址下载Sysinternals工具:

https://docs.microsoft.com/en-us/sysinternals/downloads/

2.3.2  TCPView说明

TCPView是Sysinternals中的一个工具,下载及说明地址为https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview

TCPView是一个Windows程序,它显示系统上所有TCP和UDP端点的详细列表,包括本地和远程地址以及TCP连接的状态。

TCPView类似图形化版本的netstat,截图如下所示:

Windows抓包与网络分析工具总结

启动TCPView时,它将枚举所有活动的TCP和UDP端点,将所有IP地址解析为其域名版本。 您可以使用工具栏按钮或菜单项来切换解析名称的显示。

默认情况下,TCPView会将IP地址以主机名显示,将端口以协议名称显示。当关闭解析地址功能时,会将IP地址及端口以数字形式显示。点击“Options”“Resolve Addresses”菜单可关闭解析地址功能,如下所示:

Windows抓包与网络分析工具总结

默认情况下,TCPView每秒更新一次,可以使用“View”“Update Speed”菜单项来更改速率,如下所示。

Windows抓包与网络分析工具总结

状态有改变的的端点会以黄色突出显示;被删除的会以红色显示,新产生的会以绿色显示。

可以通过选择“File”“Close Connection”,或右键单击连接并从弹出的菜单中选择“Close Connection”来关闭已建立的TCP/IP连接(标记为ESTABLISHED状态的连接)。

Windows抓包与网络分析工具总结 Windows抓包与网络分析工具总结

可以使用“File”“Save”菜单项将TCPView的输出窗口保存到文件中。

2.3.3  Tcpvcon说明

TCPView下载中还包含了Tcpvcon工具,为命令行工具,与TCPView具有等同的功能。

说明如下:

Tcpvcon usage is similar to that of the built-in Windows netstat utility:

Usage: tcpvcon [-a] [-c] [-n] [process name or PID]

Parameter      Description

-a    Show all endpoints (default is to show established TCP connections).

-c    Print output as CSV.

-n   Don't resolve addresses.

2.4  Process Monitor

2.4.1  Process Monitor说明

Process Monitor也是Sysinternals中的一个工具,下载及说明地址为https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

Process Monitor是Windows的高级监视工具,可实时显示各进程的文件、注册表、网络和进程/线程行为。

点击Process Monitor中的Windows抓包与网络分析工具总结按钮,可以分别启用或关闭对于注册表、文件、网络及进程/线程操作的监控。当某个按钮处于点击状态时,启用对应操作的监控;当某个按钮牌未点击状态时,关闭对应操作的监控。如下图所示,全部功能的监控均为关闭状态。

Windows抓包与网络分析工具总结

2.4.2  Process Monitor过滤器使用

打开Process Monitor时,会自动打开过滤器窗口。也可通过点击Windows抓包与网络分析工具总结图标,或“Filter”“Filter”菜单打开过滤器窗口。

Windows抓包与网络分析工具总结

Windows抓包与网络分析工具总结

打开过滤器窗口,如下所示。

Windows抓包与网络分析工具总结

过滤器中包含4个下拉框,分别为Column、Relation、Value、Action。

Column为需要过滤的属性,如进程PID、进程名等;

Windows抓包与网络分析工具总结

Relation为过滤的方式,如Value等于或不等于设置的值时,则执行Action对应的操作;

Windows抓包与网络分析工具总结

Value为过滤的内容,如Column选择通过进程PID进行过滤时,Value需要设置为进程PID;

Action为过滤的操作,即对于满足过滤条件的记录,包含还是排除。

Windows抓包与网络分析工具总结

如下图所示,以下过滤规则代表对于进程名为“java.exe”的进程,监控其行为。

Windows抓包与网络分析工具总结

可以设置多个过滤规则同时生效。

点击“Add”按钮,可增加过滤规则。

选中过滤规则后点击“Remove”按钮,可删除过滤规则。

双击过滤规则,可进行重新编辑。

当取消列表中某个过滤规则的单选框时,对应的过滤规则不会生效。

2.4.3  使用Process Monitor监控进程网络操作

在Process Monitor,仅点击网络监控对应的按钮,可以分别仅启用对于网络操作的监控,关闭对于注册表、文件进程/线程操作的监控。如下图所示。

Windows抓包与网络分析工具总结

在Process Monitor的“Options”菜单中取消钩选“Show Resolved Network Addresses”,可取消对IP地址与端口的转换。

若不取消钩选该选项,地址可能以主机名形式显示,端口可能以协议名称形式显示,如“localtest:http”。

当取消钩选该选项时,地址会显示为数字形式的IP,端口也以数字形式显示,如“127.0.0.1:80”。

Windows抓包与网络分析工具总结

在过滤器中将Column选择“Operation”时,查看Value下拉框,可以看到如下与网络相关的操作:

Windows抓包与网络分析工具总结

与网络相关的操作包括:

TCP Accept

TCP Connect

TCP Disconnect

TCP Other

TCP Receive

TCP Reconnect

TCP Retransmit

TCP Send

TCP TCPCopy

TCP Unknown

UDP Accept

UDP Connect

UDP Disconnect

UDP Other

UDP Receive

UDP Reconnect

UDP Retransmit

UDP Send

UDP TCPCopy

UDP Unknown

2.4.4  使用Process Monitor监控TCP连接

在Process Monitor的过滤器窗口中添加过滤规则,“Operation is TCP Connect then Include”,可仅对进程的TCP连接行为进行监控,如下所示:

Windows抓包与网络分析工具总结

为了使Process Monitor仅展示关注的信息,可仅监控对于特定IP或端口的网络行为,添加过滤规则“Path contains xxx the Include”,如下所示,仅当IP为“220.181.57.216”时,才进行监控:

Windows抓包与网络分析工具总结

以下以telnet命令为例,监控其TCP连接的行为。

添加过滤规则“”,仅监控进程名为“telnet.exe”的行为,如下所示:

Windows抓包与网络分析工具总结

当前的过滤规则如下:

Windows抓包与网络分析工具总结

在cmd窗口中执行“telnet 220.181.57.216 443”(执行3次),查看Process Monitor监控结果如下,可以看到telnet.exe进程进行了三次TCP连接操作。

Windows抓包与网络分析工具总结

2.5  Wireshark

2.5.1  Wireshark说明

Wireshark是一个网络数据包分析器,尝试捕获网络数据包并尝试尽可能详细地显示该数据包数据。

Wireshark功能非常强大,以下仅对捕获网络数据包的部分功能进行说明。

Wireshark依赖WinPcap或Npcap,https://wiki.wireshark.org/WinPcap中有说明。

以下使用的Wireshark版本为2.4.0。

2.5.2  捕获过滤器

关于Wireshark捕获过滤器的说明可查看以下链接:

https://wiki.wireshark.org/CaptureFilters

https://www.wireshark.org/docs/wsug_html_chunked/ChCapCaptureFilterSection.html

http://www.tcpdump.org/manpages/pcap-filter.7.html

Wireshark使用与tcpdump,WinDump,Analyzer以及任何其他使用libpcap/WinPcap库的程序相同的捕获过滤器语法。

在选择网卡开启抓包时,可以设置捕获过滤器,如下图所示:

Windows抓包与网络分析工具总结

在打开“捕获接口”窗口后,选择网卡,也可以设置捕获过滤器,如下图所示:

Windows抓包与网络分析工具总结

2.5.3  显示过滤器

关于Wireshark显示过滤器的说明可查看以下链接:

https://wiki.wireshark.org/DisplayFilters

https://www.wireshark.org/docs/wsug_html_chunked/ChWorkBuildDisplayFilterSection.html

https://www.wireshark.org/docs/man-pages/wireshark-filter.html

启动Wireshark捕获后,可在以下编辑框中设置显示过滤器规则。

Windows抓包与网络分析工具总结

设置显示过滤器规则后,点击Windows抓包与网络分析工具总结按钮,可以清空显示过滤器规则。

Windows抓包与网络分析工具总结

2.5.4  捕获过滤器与显示过滤器的区别

捕获过滤器与显示过滤器不同,捕获过滤器更到受多的限制,用于减少原始数据包捕获的大小;显示过滤器用于隐藏来自数据包列表的一些数据包。

捕获过滤器在开始捕获数据包之前设置,在捕获期间无法修改;显示过滤器没有此限制,可以动态更改它们。

设置捕获过滤器后,Wireshark只会捕获满足过滤规则的数据包,对于不满足的数据包不会捕获;显示过滤器不会影响数据包捕获,只是影响数据包的展示。

2.5.5  捕获过滤器示例

Wireshark网页中有对于捕获过滤器的详细说明,以下仅对常用命令进行说明。

2.5.5.1     捕获过滤器常用示例

仅捕获进出IP地址为172.18.5.4的流量:

host 172.18.5.4

仅捕获端口为53的流量:

port 53

仅捕获访问IP地址为172.18.5.4,端口为53,协议为tcp的流量:

tcp host 172.18.5.4 and port 53

仅捕获访问IP地址非172.18.5.4,且端口非53的流量:

host not 172.18.5.4 and port not 53

仅捕获请求方IP地址为172.18.5.4的流量:

src host 172.18.5.4

仅捕获请求方端口为53的流量:

src port 53

仅捕获接收方IP地址为172.18.5.4的流量:

dst host 172.18.5.4

仅捕获接收方端口为53的流量:

dst port 53

以下设置捕获过滤器为“host 10.1xx.xxx.xxx and port 80”,仅捕获IP地址为“10.1xx.xxx.xxx”,且端口为80的数据包,捕获数据包示例如下(请求一次):

Windows抓包与网络分析工具总结

在Info列可看到请求方与接口方端口。

2.5.5.2     捕获TCP连接示例

在TCP连接三次握手过程中,第二次接收者会回应SYN与ACK标志。

可通过捕获过滤器设置仅捕获存在SYN与ACK标志的数据包,捕获TCP连接请求,如下所示:

tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0

以下设置捕获过滤器为“host 10.1xx.xxx.xxx and port 80 and tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0”,仅捕获IP地址为“10.1xx.xxx.xxx”,且端口为80的数据包的TCP连接请求,捕获数据包示例如下(请求三次):

Windows抓包与网络分析工具总结

2.5.6  显示过滤器示例

Wireshark网页中有对于显示过滤器的详细说明,以下仅对常用命令进行说明。

2.5.6.1     显示过滤器常用示例

仅展示进出IP地址为172.18.5.4的流量:

ip.addr == 172.18.5.4

仅展示端口为53的流量:

tcp.port == 53

仅展示进出IP地址为172.18.5.4,端口为53,协议为tcp的流量:

tcp && ip.addr == 172.18.5.4 && tcp.port == 53

tcp and ip.addr == 172.18.5.4 and tcp.port == 53

仅展示请求方IP地址为172.18.5.4的流量:

ip.src == 172.18.5.4

仅展示请求方端口为53流量:

tcp.srcport == 53

仅展示接收方IP地址为172.18.5.4的流量:

ip.dst == 172.18.5.4

仅展示接收方端口为53流量:

tcp.dstport == 53

仅展示方法为GET的HTTP协议流量:

http.request.method == "GET"

仅展示内容包含“Connection”的TCP协议流量:

tcp contains "Connection"

仅展示内容包含“Connection”的HTTP协议流量:

http contains "Connection"

以下设置显示过滤器为“ip.addr == 10.1xx.xxx.xxx && tcp.port == 80 && tcp contains "Connection"”,仅展示IP地址为“10.1xx.xxx.xxx”,且端口为80的数据包,且TCP数据包含“Connection”的数据包,如下:

Windows抓包与网络分析工具总结

2.5.6.2     显示TCP连接示例

可通过显示过滤器设置仅显示存在SYN与ACK标志的数据包,捕获TCP连接请求,如下所示:

tcp.flags.syn == 1 && tcp.flags.ack == 1

tcp.flags.syn == 1 and tcp.flags.ack == 1

以下设置显示过滤器为“ip.addr == 10.1xx.xxx.xxx && tcp.port == 80 && tcp.flags.syn == 1 && tcp.flags.ack == 1”,仅捕获IP地址为“10.1xx.xxx.xxx”,且端口为80的数据包的TCP连接请求,捕获数据包示例如下(请求三次):

Windows抓包与网络分析工具总结

2.5.7  追踪TCP/HTTP流

在列表中选中记录,点击右键,选择“追踪流”“TCP流/HTTP流”菜单,可通过追踪TCP流窗口查看TCP/HTTP通信数据。

Windows抓包与网络分析工具总结

通过追踪TCP流窗口查看TCP通信数据如下。可以使用查找、修改展示方式、保存数据包内容等功能,方便分析TCP通信数据。

Windows抓包与网络分析工具总结

2.5.8  回环地址

在Windows环境中,使用WinPcap等数据包捕获驱动程序,无法对本地环回地址127.0.0.1进行捕获。https://wiki.wireshark.org/CaptureSetup/Loopback对此有说明。

如在Windows环境中,IP地址为192.168.0.1,监听了80端口,在本机访问http://127.0.0.1/http://192.168.0.1/,使用Wireshark均无法捕获数据包。

在Windows环境可以使用像RawCap这样的原始套接字嗅探器来捕获localhost网络流量。

2.6  RawCap

RawCap说明及下载地址为https://www.netresec.com/?page=RawCap

RawCap是一个使用原始套接字的Windows环境免费命令行网络嗅探器,可以嗅探任何有IP地址的网络接口,包括127.0.0.1(localhost/loopback)。

2.6.1  RawCap使用说明

RawCap.exe可直接执行,或在cmd命令窗口中执行。

执行“RawCap.exe --help”,可查看RawCap使用说明。

RawCap使用说明如下:

Usage: RawCap.exe [OPTIONS] <interface_nr> <target_pcap_file>

RawCap选项如下:

 -f             每个数据包后刷新数据到文件(无缓冲区)

 -c <count>     收到<count>个数据包后停止嗅探

 -s <sec>       在<sec>秒后停止嗅探

执行RawCap.exe后,会显示当前机器的网络接口信息并提示选择,如下所示:

Interfaces:

 0.     192.168.0.1     本地连接 2      Ethernet

 1.     127.0.0.1       Loopback Pseudo-Interface 1     Loopback

Select interface to sniff [default '0']:

输入对应的数字,可以选择需要嗅探的网络接口,如输入“1”,则对回环伪接口进行嗅探。

选择需要嗅探的网络接口后,需要输入保存网络数据包的文件名,默认使用“dumpfile.pcap”,如下所示:

Output path or filename [default 'dumpfile.pcap']:

直接回车则使用默认文件名“dumpfile.pcap”,或使用指定的文件名。开始嗅探后,显示如下所示:

Sniffing IP : 127.0.0.1

File        : dumpfile.pcap

Packets     : 24

在启动RawCap.exe时,可以指定网络接口信息及保存网络数据包的文件名,如:

RawCap.exe 127.0.0.1 localhost_capture.pcap

2.6.2  使用RawCap捕获本地回环地址数据包

在本机启动HTTP服务,监听80端口,在本机访问80端口并捕获数据包。

2.6.2.1     访问127.0.0.1

当客户端通过127.0.0.1访问时,需要对127.0.0.1对应的网络接口进行捕获。

使用以下命令开始捕获:

RawCap.exe 127.0.0.1 127.0.0.1.pcap

捕获产生的pcap文件可以使用Wireshark打开,如下所示:

Windows抓包与网络分析工具总结

Windows抓包与网络分析工具总结

可以看到127.0.0.1对应的数据包通过RawCap可以成功捕获(无法通过Wireshark捕获)。

2.6.2.2     访问局域网IP

当客户端通过局域网IP访问时,需要对局域网IP对应的网络接口进行捕获。

使用以下命令开始捕获:

RawCap.exe 192.168.0.1 local.pcap

使用Wireshark打开捕获产生的文件如下:

Windows抓包与网络分析工具总结

Windows抓包与网络分析工具总结

可以看到局域网IP对应的数据包通过RawCap可以成功捕获(无法通过Wireshark捕获)。