昨兒個整理了下怎么用wireshark抓包,鏈接在這里:捋捋wireshark
今天打算抓個TCP通訊的包試試,整體來說比較有收獲,給大家匯報一下。
首先就是如何搞到可以用來演示TCP通訊的客戶端、服務端,問了下deepseek,win 10上可以用powershell這樣啟動一個監聽8080端口的服務端:
文字版的貼到這里:
$listener?= New-Object System.Net.Sockets.TcpListener('0.0.0.0', 8080)
$listener.Start()
用netstat查看一下監聽狀態,命令 netstat -ano | findstr -I "listen" | findstr 8080,效果:
把這個powershell窗口關閉,再啟動一個看一下8080,就不是監聽狀態了:
莫怪我為何要寫這一段,因為我沒怎么用過powershell。。。咱繼續。。。我這里用一個內網ip為192.168.1.183的windows 10辦公電腦啟動服務端,從內網ip為192.168.3.240的辦公的筆記本上啟動客戶端、啟動wireshark抓包,然后把每一步操作都寫下來。
從內網臺式機上啟動服務端:
現在我們啟動了服務端,等待客戶端連接(注意光標的位置,阻塞、等待客戶端連接)。這些命令的文字版最后帖到文末哈,這里看圖就行。
確認一下8080端口啟動了,順便看看監聽8080端口的進程信息,漂亮:
從筆記本上啟動wireshark,選擇從無線網上抓包,設定只捕獲過和192.168.1.183:8080的tcp通訊:tcp port 8080 and host 192.168.1.183,
如果覺得這里表述不夠詳細,看本文開頭說的那個帖子,我這里已經監聽上了:
從筆記本上用powershell啟動客戶端:
這個命令會得到一個連接到服務端的客戶端對象$client,wireshark捕捉到了三個握手的數據包:
現在我們給服務端發一點消息:
那個flush命令發出后,wireshark就抓到了這倆數據包:
現在該從服務端操作了,這個命令已經不是阻塞狀態了:
應該是三次握手就不阻塞了,當時沒看,不要在意這些細節,咱們收一下客戶端發來的消息:
順便說一句,這里獲取reader/writer實例的寫法跟php里的很像,powershell真是兼容并包啊。。
我們從服務端給客戶端一些答復:
去看筆記本電腦上的wireshark,新抓到2個數據包:
從客戶端接收一下服務端發來的消息,并給對方回復:
去看wireshark,又抓到倆數據包:
去服務端接收一下客戶端的消息,給出回復:
去看wireshark,又抓到2個包:
從客戶端接收一下:
是時候結束會話了,客戶端:
wireshark抓到了2個揮手的包:
服務端:
wireshark又抓到了2個揮手的包:
繼續關閉吧,客戶端:
服務端:
臺式機的8080端口也不是被監聽的狀態了:
wireshark結束監聽,保存包:
附文字命令,服務端:
$listener = New-Object System.Net.Sockets.TcpListener('0.0.0.0', 8080)
$listener.Start()
Write-Host "服務端已啟動,等待客戶端連接..."
$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
$reader = [System.IO.StreamReader]::new($stream)
$writer = [System.IO.StreamWriter]::new($stream)
$message = $reader.ReadLine()
Write-Host "收到客戶端消息: $message"
$writer.WriteLine("已收到: $message;問:你這瓜保熟嗎?")
$writer.Flush()
$message = $reader.ReadLine()
Write-Host "收到客戶端消息: $message"
$writer.WriteLine("知道了,再探再報")
$writer.Flush()
$reader.Close()
$writer.Close()
$client.Close()
$listener.Stop()
客戶端:
$client?= New-Object System.Net.Sockets.TcpClient("192.168.1.183", 8080)
$stream = $client.GetStream()
$reader = New-Object System.IO.StreamReader($stream)
$writer = New-Object System.IO.StreamWriter($stream)
$writer.WriteLine("號外,阿三的陣風被小巴的殲十打下來了")
$writer.Flush()
$response = $reader.ReadLine()
Write-Host "收到服務端消息: $response"
$writer.WriteLine("是真的,網上視頻都出來了")
$writer.Flush()
$response = $reader.ReadLine()
Write-Host "收到服務端消息: $response"
$reader.Close()
$writer.Close()
$client.Close()