socket網路程式設計中的ioctl 函式

2021-08-07 06:29:09 字數 1711 閱讀 2169

網上關於socket網路程式設計中的ioctl()函式的資料整理收集。此部落格作為自己的筆記。

linux網路程式與核心互動的方法是通過ioctl來實現的,ioctl與網路協議棧進行互動,可得到網路介面的資訊,網絡卡裝置的對映屬性和配置網路介面.並且還能夠檢視,修改,刪除arp快取記憶體的資訊

arp協議的基本內容,就是當僅僅知道對方主機的ip位址要求獲取對方的mac位址。

arp快取記憶體裡邊儲存了之前進行arp會話時返回的arp應答中的ip位址和mac位址對應列表。一般一條記錄儲存20分鐘左右。

目的是:下次再要訪問arp快取記憶體中的ip位址的主機時,不需要再次傳送arp請求去獲取mac位址。直接從快取記憶體中讀取就可以了。可以有效緩解鏈路的壓力。

在ip乙太網中,當乙個上層協議要發包時,有了該節點的ip位址,arp就能提供該節點的mac位址。  

請求碼類別request

說明資料型別

接 

siocgifconf 

siocsifaddr 

siocgifaddr 

siocsifflags 

siocgifflags 

siocsifdstaddr 

siocgifdstaddr 

siocgifbrdaddr 

siocsifbrdaddr 

siocgifnetmask 

siocsifnetmask 

siocgifmetric 

siocsifmetric 

siocgifmtu 

sioc***

獲取所有介面的清單 

設定介面位址 

獲取介面位址 

設定介面標誌 

獲取介面標誌 

設定點到點位址 

獲取點到點位址 

獲取廣播位址 

設定廣播位址 

獲取子網掩碼 

設定子網掩碼 

獲取介面的測度 

設定介面的測度 

獲取介面mtu 

(還有很多取決於系統的實現)

struct ifconf 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq 

struct ifreq

//查詢目標ip位址

err=ioctl(s,siocgifdstaddr,&ifr);

if(!err){

inet_ntop(af_inet,&sin->sin_addr.s_addr,ip,16);

printf("siocgifdstaddr:%s\n",ip);

//查詢子網掩碼

err=ioctl(s,siocgifnetmask,&ifr);

if(!err){

inet_ntop(af_inet,&sin->sin_addr.s_addr,ip,16);

printf("siocgifnetmask:%s\n",ip);

//以上,參考 ioctl函式詳解

DEV C 中Socket網路程式設計

dev c 是乙個小巧開源的c c 整合開發環境,對於大部分的linux函式,都可以在引用標頭檔案後直接呼叫,但開發socket網路程式卻要多做一些工作。新增 標頭檔案不可以。新增 pragma comment lib,ws2 32.lib 仍然報錯 學習自 在程式中引用標頭檔案 include 2...

Java中的網路程式設計(Socket程式設計)2

封裝計算機的ip位址 沒有埠 public static void main string args throws unknownhostexception包含埠,用於socket通訊的 注意 傳送端和接收端的埠號要一致 埠號由接收方或者伺服器來定義 然後通知傳送方或者客戶端,按照這個埠傳送 pub...

網路程式設計 Socket程式設計

一 網路部分 1.ip 2.埠號 在網路協議中使用埠號識別主機上不同的程序,不同的埠對應於不同的服務 應用程式 3.協議 tcp二 socket部門socket通訊基本流程圖 根據socket通訊基本流程圖,總結通訊的基本步驟 伺服器端 第一步 建立乙個用於監聽連線的socket對像 第二步 用指定...