用什麼套件建構封包
先來測一下有go有什麼packet interface好用的套件,像其他語言例如c、python可以用socket建構封包。python還有另一個套件庫scapy,專門處理各種交互式數據封包操作庫。
回來go。首先,先建立一個SYN封包。 使用Go原生庫中的net
Overview Package net provides a portable interface for network I/O, including TCP/IP, UDP, domain name resolution, and Unix domain sockets.
|
|
因為SYN是TCP/IP建立連線使用的握手信號,所以建立net.Dial得時候使用的是tcp 看一下net.Dial源碼註釋
|
|
可以看出Dial支援多種傳輸類型;也可以使用host代替ip targetIP也可以使用"example.com"等hostname
TCP SYN 封包
接下來建立TCP SYN封包
來源
- Source Port(16 bits/2 bytes): 來源端口號
- Destination Port(16 bits/2 bytes): 目的端口號
- Sequence Number(32 bits/4 bytes): 3次握手建立連結後,建立一個隨機初始序列號/起始數據位,隨後按傳輸的字節數遞增。
- Acknowledgment Number(32 bits/4 bytes): 預測下一個TCP的序列號。
- Header length field(4 bits): 標示TCP Header大小。
- Reserved bits(6 bits): 設置為0,保留供以後使用。
- Flag bits(6 bits): 包括SYN、ACK、RST、FIN、URG和PSH等標籤。
- Window Size(16 bits/2 bytes): 指定接收端的窗口大小,用於流量控制。
- Checksum(16 bits/2 bytes): 校驗TCP Header與Data的完整性。
- Urgent Pointer(16 bits/2 bytes): 只有設定URG標示才會使用。
- Options/optional data(0-40 Bytes):包含可選訊息。可不寫,所以TCP Header總大小在20~60
建立TCP Header
|
|
好像缺了什麼?明天繼續