タイトル:other-Wireshark_Networkキャプチャ
カテゴリ:その他
タグ:[Capture、Wireshark]
日付:2020-10-26 16:57:58
コメント:false
mathjax:true
toc:true
その他-Wireshark_ネットワークパケットキャプチャ
前日譚
- ダウンロードリンク:ネットワークパケット分析ツールWireshark 3.3.0 + x64中国語多言語無料バージョン-http://www.dayanzai.me/wireshark.html
- Wiresharkの実用的なフィルタリング式(IP、プロトコル、ポート、長さ、コンテンツ用)-https://blog.csdn.net/aflyeaglenku/article/details/50884296
- Wiresharkの使用スキルとデータパケット分析方法-https://zhuanlan.zhihu.com/p/31512066
フィルター条件
- ワイヤーハークのフィルタリングルールと使用法-https://blog.csdn.net/wojiaopanpan/article/details/69944970
フィルターIP
たとえば、送信元IPまたは宛先IPが特定のIPと等しい場合
- ip.src == 192.168.1.107 || ip.dst == 192.168.1.107`
- ip.addr == 192.168.1.107:ip.src == 192.168.1.107と同等|| ip.dst == 192.168.1.107
フィルターポート
- tcp.port == 80:tcp.srcport == 80と同等|| tcp.dstport == 80
- tcp.port == 80 || udp.port == 80
- tcp.dstport == 80:tcpプロトコルのターゲットポート80のみを表示します
- tcp.srcport == 80:tcpプロトコルの送信元ポート80のみを表示します
フィルタープロトコル
- tcp
- udp
- arp
- icmp
- http
- smtp
- ftp
- dns
- msnms
- ip
- ssl
- oicq
- bootp
- !Arpまたはnotarpなどのarpパッケージを除外します。
フィルタパケット長
- udp.length == 26この長さは、udp自体の固定長8に、udpの下のデータパケットの合計を加えたものを指します。
- tcp.len> = 7は、tcp自体を除くipパケット(tcpより下のデータ)を指します。
- ip.len == 94イーサネットヘッダー14の固定長を除いて、他のすべてはip.lenと見なされます。つまり、ip自体から最後までです。
- frame.len == 119ethの最初から最後までのパケット全体の長さ
フィルターMAC
EtherNetヘッドフィルター
- eth.dst == A0:00:00:04:C5:84 //ターゲットMacをフィルタリングします
- eth.src eq A0:00:00:04:C5:84 //ソースMacをフィルタリングする
- eth.dst == A0:00:00:04:C5:84
- eth.dst == A0-00-00-04-C5-84
- eth.addr eq A0:00:00:04:C5:84 // A0:00:00:04:C5:84に等しいソースMACとターゲットMACをフィルタリングします
httpモードをフィルタリングする
- http.request.method ==“ GET”
- http.request.method ==“ POST”
- http.request.uri ==“ /img/logo-edu.gif”
- httpには「GET」が含まれています
- httpには「HTTP / 1」が含まれています。
// GETパッケージ
-
http.request.method ==“ GET” && httpには「Host:」が含まれます
-
http.request.method ==“ GET” && httpには「User-Agent:」が含まれています
// POSTパケット
- http.request.method ==“ POST” && httpには「Host:」が含まれます
- http.request.method ==“ POST” && httpには「User-Agent:」が含まれています
//応答パケット
- httpには「HTTP / 1.1200OK」が含まれています&& httpには「Content-Type:」が含まれています
- httpには「HTTP / 1.0200OK」が含まれています&& httpには「Content-Type:」が含まれています
TCPパラメータをフィルタリングする
- tcp.flagsは、TCPフラグを含むパケットを表示します。
- tcp.flags.syn == 0x02 TCPSYNフラグを含むパケットを表示します。
- tcp.window_size == 0 && tcp.flags.reset!= 1
パッケージの内容をフィルタリングする
- tcp [20]は、20から開始し、1文字を取ることを意味します
- tcp [20:]は、20から始まり、複数の文字を取ることを意味します
注:2つの点線のコンテンツは、wireshark(linux)でのテストに失敗しました。
tcp [20:8]は、20から始まり、8文字を取ることを意味します
。tcp[offset、n]
udp [8:3]81:60:03 // 8バイトをオフセットしてから、3つの数値を取得します。これは、次のデータは等しいですか?
udp [8:1] == 32私の推測が正しければ、udp [オフセット:インターセプトの数] =
nValue eth.addr [0:3]である必要があります。00:06:5B
例:
updより下の最初の3つのデータパケットが0x20 0x210x22に等しいかどうかを判別します。udpの
固定長が8udp
[8:3]であることは誰もが知っています。午後08時21分22秒
のTCPブロックの最初の3つのパケットが0x20の0x21でただし0x22に等しいかどうか
一般的に、TCP、長さが20であり、時にはそれが20ない
TCP [8:3]20:21:22
最も正確なものを取得したい場合は、最初にtcpの長さが
一致(一致)し、構文
ip.srcが含まれている(文字列を含む)ことを知っておく必要があります。192.168.1.107およびudp [8:5]は「\ x02 \ x12 \ x21 \ x00 \ x22」と一致します------ ??? --------
ip.src192.168.1.107およびudpには02:12:21:00:
22ip.srcが含まれています192.168.1.107およびtcpに「GET」
が含まれるudpに含まれる7c:7c:7d:7dは、ペイロードに0x7c7c7d7dを含むUDPパケットと一致しますが、必ずしも最初のバイトからではありません。
httpパケットキャプチャ-json
-
データをリクエストする
const url = "http://192.168.1.233:57305/hotupdate" request.post(url, { json: { Plat: 1042, Os: 2, Appid: 3, Uid: "123123", Version: "0.301.3.4", Deviceid: "wolegequ", } }, (error, res, body) => { if (error) { console.error(error) return } console.log(`--- statusCode: ${ res.statusCode}`) console.log(`--- post rsp:`, body) })
リクエストパケット
-
たとえば、次の式を入力します。
ip.dst == 192.168.1.233 && tcp.port == 57305
192.168.1.233のリクエストターゲットIPデータをキャプチャできます
返品パッケージ
-
たとえば、次の式を入力します。
ip.src == 192.168.1.233 && tcp.port == 57305
データを返すためにソースIPをキャプチャできます192.168.1.233
httpキャプチャストリーム
このデモはゲームのプロトコルに基づいています。アップストリームデータのバフ構造:[バフ合計サイズ] + [pbバフ]、pbバフは頭と体で構成されます
リクエストパケット
-
リクエストインターフェイスを選択-> [データ]を右クリック-> [パケットバイトストリームのエクスポート]を選択し、ファイルloginData.binにエクスポートします。これは、クライアントのシングルエンドアップリンクのバイナリデータです。
-
loginData.binファイルを解析します。(golangデモ)
func Test_login_data(t *testing.T) { path := "C:/Users/wolegequ/Desktop/loginData.bin" bts, err := ioutil.ReadFile(path) if err != nil { panic(err) } log.Printf("--- total len: %d\n", len(bts)) pld := &csprotos.PayloadData{ } err = proto.Unmarshal(bts[2:], pld) // 去掉头部 两个字节 (buff 总长度值) if err != nil { panic(err) } log.Printf("--- body len: %d\n", len(pld.CSBody)) req := &csprotos.LoginReq{ } err = proto.Unmarshal(pld.CSBody, req) if err != nil { panic(err) } log.Printf("--- req: %v\n", req) } /* 结果: 2020/10/26 20:10:11 --- total len: 81 2020/10/26 20:10:11 --- body len: 57 2020/10/26 20:10:11 --- req: PlatID:1042 ChanID:1 ... */
tcpキャプチャストリーム
[http Capture-stream](#http Capture-stream)とほぼ同じ
リクエストパケット
-
リクエストインターフェイスを選択-> [データ]を右クリック->パケットバイトストリームのエクスポート、ファイルheart.binにエクスポートします。これは、クライアントのシングルエンドアップリンクのバイナリデータです。
-
heart.binファイルを解析します(golangデモ)
func Test_login_data(t *testing.T) { path := "C:/Users/wolegequ/Desktop/heart.bin" bts, err := ioutil.ReadFile(path) if err != nil { panic(err) } log.Printf("--- total len: %d\n", len(bts)) pld := &csprotos.PayloadData{ } err = proto.Unmarshal(bts[2:], pld) // 去掉头部 两个字节 (buff 总长度值) if err != nil { panic(err) } log.Printf("--- pld: %+v\n", pld) /* 结果: 2020/10/26 20:43:11 --- total len: 34 2020/10/26 20:43:11 --- pld: CSHead:{CMDID:303 ReqID:26 ...} CSBody:"" ExtA:12516300 ExtC:1320706011723882496 */ }