Wireshark パケット キャプチャの一般的なコマンド

1. 一般的に使用されるフィルタリング ルール

送信元アドレスを指定します:

ip.src == 10.0.1.123
ip.src == 10.0.1.123 && udp
http
数据链路层:

筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26

筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26

网络层:

筛选ip地址为192.168.1.1的数据包----ip.addr == 192.168.1.1

筛选192.168.1.0网段的数据---- ip contains "192.168.1"

筛选192.168.1.1和192.168.1.2之间的数据包----ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2

筛选从192.168.1.1到192.168.1.2的数据包----ip.src == 192.168.1.1 && ip.dst == 192.168.1.2

传输层:

筛选tcp协议的数据包----tcp

筛选除tcp协议以外的数据包----!tcp

筛选端口为80的数据包----tcp.port == 80

筛选12345端口和80端口之间的数据包----tcp.port == 12345 && tcp.port == 80

筛选从12345端口到80端口的数据包----tcp.srcport == 12345 && tcp.dstport == 80

应用层:

过滤请求数据包----http.request

过滤响应数据包----http.response

过滤指定域名----http.host == “xxx.xxx.xxx”

筛选url中包含.php的http数据包----http.request.uri contains ".php"

筛选内容包含username的http数据包----http contains "username"

过滤请求头----http.request.method == GET

过滤请求的url----http.request.url==”/xxx/xxxx”

过滤包含HTTP错误状态码的响应数据包----http.request.code >= 400

过滤服务器端错误状态码的响应数据包----http.response.code <=599。

2.UDPメッセージの構造

ここに画像の説明を挿入します

3.TCPメッセージ構造

ここに画像の説明を挿入します

4.ポイント

ここで重要なポイントについて話しましょう

4.1 TCP/UDP ヘッダーのチェックサム

最初の数枚の写真でチェックサムを確認できます。
TCP データ パケットのチェックサム計算のデータ ソースには、TCP 疑似ヘッダー、TCP ヘッダー、および TCP データの 3 つの部分が含まれます。TCP 計算チェックサムでは、後で導入される UDP を含む疑似ヘッダーが導入されます。次の図に示すように、TCP 疑似ヘッダーには、送信元アドレス (32 ビット)、宛先アドレス (32 ビット)、ゼロ (8 ビット)、プロトコル (8 ビット)、TCP 長さ (16 ビット) が含まれます。
ここに画像の説明を挿入します

ここに画像の説明を挿入します
上図からわかるように、送信元アドレスは 106.11.43.158 (6a 0b 2b 9e)、宛先アドレスは 192.168.1.105 (c0 a8 01 69)、TCP プロトコル番号は 6、TCP データ長はIP データの全長から IP ヘッダーを差し引いた長さ 52-20=32 (0x20)。次に、TCP ヘッダー部分とデータ部分のパケット キャプチャの例を示します。
ここに画像の説明を挿入します
上の図からわかるように、TCP チェックサムは 0x755E で、計算プロセスは次のとおりです。

  1. 擬似ヘッダのデータを取得する

送信元アドレス 宛先アドレス ゼロ プロトコル TCP 長さ

6a 0b 2b 9e c0 a8 01 69 00 06 00 20

  1. 擬似ヘッダーデータを 16 ビットのグループに結合して追加します。

6a0b+2b9e+c0a8+0169+0006+0020=157E0

  1. TCPデータを取得する

01 bb デ c0 d3 86 24 c6 0e 5f 8d 90 80 10 00 0e 75 5e 00 00 01 01 05 0a 0e 5f 8d 8f 0e 5f 8d 90

  1. チェックサム部分を00 00に設定します

01 bb de c0 d3 86 24 c6 0e 5f 8d 90 80 10 00 0e 00 00 00 00 01 01 05 0a 0e 5f 8d 8f 0e 5f 8d 90

  1. TCP データを 16 ビットのグループに結合して追加します。

01bb+dec0+d386+24c6+0e5f+8d90+8010+000e

+0000+0000+0101+050a+0e5f+8d8f+0e5f+8d90=432BC

  1. 擬似ヘッダーと TCP データを追加します。

157E0 + 432BC = 58A9C

  1. 前のステップの結果の上位 16 ビットと下位 16 ビットを加算します。

8A9C + 5 = 8AA1

  1. 0xFFFF から 8AA1 を減算してチェックサムを取得します

0xFFFF - 0x8AA1 = 755E

  1. これは、キャプチャされたパケットのチェックサム比較と一致しています。

4.2 Python を使用してソフトウェア開発およびテスト用の TCP/UDP メッセージを生成する

#!/usr/bin/env python

import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 1337
BUFFER_SIZE = 1024
MESSAGE = 'Hello, World!'
encoded = str.encode(MESSAGE)     # b'Hello, World!'
decoded = encoded.decode()        # 'Hello, World!' 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(encoded)
data = s.recv(BUFFER_SIZE)
s.close()

print ("received data:", data)

5. Wireshark は TCP パケットをキャプチャし、3 ウェイ ハンドシェイクを分析します

最初のハンドシェイク パケット

クライアントは、SYN=1、ACK=0 のデータ パケットを送信します。シーケンス番号は 0 から始まり、クライアントが接続の確立を要求していることを示します。
ここに画像の説明を挿入します

2 番目のハンドシェイク パケット

サーバーはデータ パケットを送信します。SYN=1、ACK=1、seq=0、ack=seq+1 は受信したデータ パケットの数を示します。

ここに画像の説明を挿入します

3回目のハンドシェイクパケット

クライアントは確認パケット SYN=0 を再送信し、サーバーは ACK=1 を確認します。ack=seq+1=1 は、現在のセグメントがデータ ビット数を正常に受信したことを示します。

ここに画像の説明を挿入します

TCP 層の FLAGS フィールドの重要な識別

ここに画像の説明を挿入します

6. いくつかの基本概念

ここに画像の説明を挿入します
ここに画像の説明を挿入します

参考ブログ

https://blog.csdn.net/qq_44281295/article/details/127110834
https://zhuanlan.zhihu.com/p/631821119
https://blog.csdn.net/to_be_better_wen/article/details/129191378

おすすめ

転載: blog.csdn.net/p309654858/article/details/132684283
おすすめ