日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libnet发包过程

發布時間:2023/12/15 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libnet发包过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019/08/12
(這篇文章更像是解釋原生socket發包的過程 2019/08/13)
今天具體了解了一下, 發包的過程,目前知道比較關注的兩種兩種發包方式,分別是構造IP包和直接構造以太網包;這兩種我都試過,他們實現的原理是不盡相同的。首先要明確的一個問題,他們都需要通過系統調用來實現功能,那么都不可能通過驅動層面的內容來進行發包,所以發包的過程,最后終究應該是和socket這種編程的方式很像。


int socket(int domain, int type, int protocol);
以前的時候,普遍在進行編程的時候都是使用一些TCP/UDP相關的編程接口;這里進行發包的過程,是通過個人的需求對數據包進行構造,通過構造之后然后選擇網卡發送出去。
同樣,這里有兩種發送方式,分別是發送IP包和發送以太網幀。
他們分別采用的協議簇是不一樣的,一個是AF_PACKET和AF_INET,具體的內容通過后面的type進行再區分。
文獻[1]中對AF_PACKET進行了比較詳細的介紹,這部分介紹個各種背景,算是比較豐富的材料,但最后說明使用的發送函數是write,這個跟我理解的不一樣,我見到的都是使用sendto/sendmsg;文獻[2]是利用這種方式進行捕包的;文獻[3]中提到的問題是發包使用的內容,他的意思是我可以不用構造相關的鏈路層信息。這個問題不是非常理解,就是編程細節的問題
文獻[4]中對兩種不同的原生socket進行了對比;文獻[5][6]分別是兩個發送和接收的范例。
文獻[7]是對raw socket的一個詳細介紹


2019/08/16
問題描述,這里遇見一個這樣的問題,在多線程同時發包的過程中,經常出現no availiable buffer(單詞可能錯),這個錯誤的原因[9],是錯誤碼 ENOBUFS,文章[9]中提到了兩個錯誤碼,另外一個是內存限制,但我看了機器當前的內存還有一些其他的博客,不然是內存的原因。 ENOBUFS這個東西的主要原因,看文檔描述,是說網卡的隊列滿了。
但是調整了相關的網卡信息之后,比如大小,緩沖區大小,雖然能減緩這種情況,但并不能完全根治這種問題;對于這部分的內容,最主要的一個問題就是沒有一個可以入手的測試方案,只能說大致上定位他在協議棧的什么位置。到目前位置,我也沒辦法對項目上發包的性能進行繼續調優。

參考文獻

[1]Raw socket, Packet socket and Zero copy networking in Linux
[2]packet-sniffer-code-in-c-using-linux-sockets-bsd-part-2/
[3]sending-data-on-af-packet-socket
[4]Linux的RAW SOCKET探索
[5]capture_ethernet_frames_using_an_af_packet_socket_in_c
[6]send_an_arbitrary_ethernet_frame_using_an_af_packet_socket_in_c
[7]suricata抓包方式之一 AF_PACKET
[8]sock_raw

總結

以上是生活随笔為你收集整理的libnet发包过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。