Windows抓包與網絡分析工具總結

以下對Windows中抓包與網絡分析相關的netstat、Get-NetTCPConnection、TCPView、Process Monitor、Wireshark、RawCap命令與工具進行了說明,並說明了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,截圖如下所示:

啓動TCPView時,它將枚舉所有活動的TCP和UDP端點,將所有IP地址解析爲其域名版本。 您可以使用工具欄按鈕或菜單項來切換解析名稱的顯示。

默認情況下,TCPView會將IP地址以主機名顯示,將端口以協議名稱顯示。當關閉解析地址功能時,會將IP地址及端口以數字形式顯示。點擊“Options”“Resolve Addresses”菜單可關閉解析地址功能,如下所示:

默認情況下,TCPView每秒更新一次,可以使用“View”“Update Speed”菜單項來更改速率,如下所示。

狀態有改變的的端點會以黃色突出顯示;被刪除的會以紅色顯示,新產生的會以綠色顯示。

可以通過選擇“File”“Close Connection”,或右鍵單擊連接並從彈出的菜單中選擇“Close Connection”來關閉已建立的TCP/IP連接(標記爲ESTABLISHED狀態的連接)。

 

可以使用“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中的按鈕,可以分別啓用或關閉對於註冊表、文件、網絡及進程/線程操作的監控。當某個按鈕處於點擊狀態時,啓用對應操作的監控;當某個按鈕牌未點擊狀態時,關閉對應操作的監控。如下圖所示,全部功能的監控均爲關閉狀態。

2.4.2  Process Monitor過濾器使用

打開Process Monitor時,會自動打開過濾器窗口。也可通過點擊圖標,或“Filter”“Filter”菜單打開過濾器窗口。

打開過濾器窗口,如下所示。

過濾器中包含4個下拉框,分別爲Column、Relation、Value、Action。

Column爲需要過濾的屬性,如進程PID、進程名等;

Relation爲過濾的方式,如Value等於或不等於設置的值時,則執行Action對應的操作;

Value爲過濾的內容,如Column選擇通過進程PID進行過濾時,Value需要設置爲進程PID;

Action爲過濾的操作,即對於滿足過濾條件的記錄,包含還是排除。

如下圖所示,以下過濾規則代表對於進程名爲“java.exe”的進程,監控其行爲。

可以設置多個過濾規則同時生效。

點擊“Add”按鈕,可增加過濾規則。

選中過濾規則後點擊“Remove”按鈕,可刪除過濾規則。

雙擊過濾規則,可進行重新編輯。

當取消列表中某個過濾規則的單選框時,對應的過濾規則不會生效。

2.4.3  使用Process Monitor監控進程網絡操作

在Process Monitor,僅點擊網絡監控對應的按鈕,可以分別僅啓用對於網絡操作的監控,關閉對於註冊表、文件進程/線程操作的監控。如下圖所示。

在Process Monitor的“Options”菜單中取消鉤選“Show Resolved Network Addresses”,可取消對IP地址與端口的轉換。

若不取消鉤選該選項,地址可能以主機名形式顯示,端口可能以協議名稱形式顯示,如“localtest:http”。

當取消鉤選該選項時,地址會顯示爲數字形式的IP,端口也以數字形式顯示,如“127.0.0.1:80”。

在過濾器中將Column選擇“Operation”時,查看Value下拉框,可以看到如下與網絡相關的操作:

與網絡相關的操作包括:

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連接行爲進行監控,如下所示:

爲了使Process Monitor僅展示關注的信息,可僅監控對於特定IP或端口的網絡行爲,添加過濾規則“Path contains xxx the Include”,如下所示,僅當IP爲“220.181.57.216”時,才進行監控:

以下以telnet命令爲例,監控其TCP連接的行爲。

添加過濾規則“”,僅監控進程名爲“telnet.exe”的行爲,如下所示:

當前的過濾規則如下:

在cmd窗口中執行“telnet 220.181.57.216 443”(執行3次),查看Process Monitor監控結果如下,可以看到telnet.exe進程進行了三次TCP連接操作。

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庫的程序相同的捕獲過濾器語法。

在選擇網卡開啓抓包時,可以設置捕獲過濾器,如下圖所示:

在打開“捕獲接口”窗口後,選擇網卡,也可以設置捕獲過濾器,如下圖所示:

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捕獲後,可在以下編輯框中設置顯示過濾器規則。

設置顯示過濾器規則後,點擊按鈕,可以清空顯示過濾器規則。

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的數據包,捕獲數據包示例如下(請求一次):

在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連接請求,捕獲數據包示例如下(請求三次):

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”的數據包,如下:

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連接請求,捕獲數據包示例如下(請求三次):

2.5.7  追蹤TCP/HTTP流

在列表中選中記錄,點擊右鍵,選擇“追蹤流”“TCP流/HTTP流”菜單,可通過追蹤TCP流窗口查看TCP/HTTP通信數據。

通過追蹤TCP流窗口查看TCP通信數據如下。可以使用查找、修改展示方式、保存數據包內容等功能,方便分析TCP通信數據。

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打開,如下所示:

可以看到127.0.0.1對應的數據包通過RawCap可以成功捕獲(無法通過Wireshark捕獲)。

2.6.2.2     訪問局域網IP

當客戶端通過局域網IP訪問時,需要對局域網IP對應的網絡接口進行捕獲。

使用以下命令開始捕獲:

RawCap.exe 192.168.0.1 local.pcap

使用Wireshark打開捕獲產生的文件如下:

可以看到局域網IP對應的數據包通過RawCap可以成功捕獲(無法通過Wireshark捕獲)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章