簡體   English   中英

如何在C中創建自定義數據包?

[英]How to create a custom packet in c?

我正在嘗試使用TCP / IP協議使用C創建自定義數據包。 當我說“定制”時,我的意思是能夠更改數據包中的任何值。 例如:MAC,IP地址等。

我嘗試四處搜尋,但找不到任何實際上可以指導我或給我示例源代碼的東西。

如何創建自定義數據包,或在哪里尋找指導?

可以移植的相對簡單的工具是libpcap 以接收原始數據包而聞名(事實上,最好先使用原始數據包,因為您可以將接收到的數據包與手工數據包進行比較),但是鮮為人知的pcap_sendpacket實際上會發送原始數據包。

如果您想自己動手做,請使用AF_PACKETSOCK_RAW打開套接字(適用於Linux,其他操作系統可能有所不同)-例如,請參見http://austinmarton.wordpress.com/2011/09/14/sending-raw -ethernet-packets-from-a-specific-interface-in-c-on-linux /和完整代碼, 網址https://gist.github.com/austinmarton/1922600 請注意,您需要是root用戶(或更准確地說具有適當的能力)才能執行此操作。

還要注意,如果您嘗試發送原始的tcp / udp數據包,您將遇到的一個問題是禁用網絡堆棧自動處理回復(通過將其視為已尋址到現有IP地址或嘗試轉發它)。

做到這一點並不像您想的那么簡單。 使用常規套接字API在IP層上方控制數據相對容易,但是在下面控制數據層則要復雜得多。 大多數操作系統使更改底層協議信息變得困難,因為內核本身管理網絡連接並且不希望您搞砸。 除此之外,還有其他平台差異,網絡控制等可能對您造成破壞。

您應該研究一些這樣做的庫。 一些例子:

如果您的目標是欺騙數據包,則還應該閱讀基於網絡的欺騙緩解技術(例如,進行出口過濾以防止欺騙性數據包離開網絡)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM