[英]How to create a custom packet in c?
我正在嘗試使用TCP / IP協議使用C創建自定義數據包。 當我說“定制”時,我的意思是能夠更改數據包中的任何值。 例如:MAC,IP地址等。
我嘗試四處搜尋,但找不到任何實際上可以指導我或給我示例源代碼的東西。
如何創建自定義數據包,或在哪里尋找指導?
可以移植的相對簡單的工具是libpcap
。 以接收原始數據包而聞名(事實上,最好先使用原始數據包,因為您可以將接收到的數據包與手工數據包進行比較),但是鮮為人知的pcap_sendpacket
實際上會發送原始數據包。
如果您想自己動手做,請使用AF_PACKET
和SOCK_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.