網路程式設計標頭檔案小結
網路程式設計的標頭檔案(這裡所有的標頭檔案都在/usr/include目錄下面) 經常被一些標頭檔案搞大,不知到到哪個標頭檔案去找結構。這裡做個總結。 ip頭部 有兩個ip頭部結構,分別是 linux/ip.h 下面結構名字struct iphdr netinet/ip.h 結構名字,這裡有兩個struct iphdr 和 struct ip 這三個都是一樣的,看個人喜好,我個人喜換netinet/ip.h下面的struct iphdr; tcp頭部 兩個 linux/tcp.h struct tcphdr netinet/tcp.h struct tcphdr 任選,不過網路程式設計的一般在netinet這個地下選,系統變成的一般去linux目錄。 udp頭部 兩個 linux/udp.h struct udphdr netinet/udp.h struct udphdr icmp頭部 linux/icmp.h struct icmphdr netinet/ip_icmp.h struct icmphdr arp頭部 linux/if_arp.h struct arphdr net/if_arp.h struct arphdr // 主要不是netinet目錄了,net。 乙太網頭部 linux/if_ether.h struct ethhdr 原則上在netinet的if_ether.h 檔案中沒有定義struct ethhdr,但是,在這個檔案中, 它引用了上面的檔案linux/if_ether.h,所以也可也引用這個檔案來定義 struct ethhdr. 這樣就統一了。 值得說明的是,netinet/if_ether.h中定義了struct ether_arp ,它是整個arp包(包括arp首部)的定義。 以上就是各個資料包的頭部格式,這在編寫構造自己的包時候很有用。 另外,還有些標頭檔案。 netinet/in.h 定義了ip地址結構 struct sockaddr_in (struct in_addr作為sockaddr_in 的成員) 還有函式 htons等,以及一些巨集。 在編寫使用者應用程式時,是少不了這個標頭檔案的(因為要構造ip地址呀) arpa/inet.h 定義了地址轉換函式 inet_ntoa inet_aton inet_pton 等等。(不過實現在別處)。 sys/socket.h 定義了一些列的socket API函式 如 socket,bind listen , send ,sendmsg,setsockopt,等等。所以這個標頭檔案和netinet/in.h標頭檔案是使用者程式不可缺少的。 ...................................................................... #include <linux/udp.h> //udp struct udphdr { u_int16_t source; u_int16_t dest; u_int16_t len; u_int16_t check; }; ........................................................................ #include <linux/icmp.h> struct icmphdr { u_int8_t type;//0--reques,8---reply,11----timeout; u_int8_t code; u_int16_t checksum; ........ }; .......................................................................... #include <linux/ip.h> struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_BITFIELD) __u8 version:4, ihl:4; #else #error "Please fix <asm/byteorder.h>" #endif __u8 tos; __be16 tot_len; __be16 id; __be16 frag_off; __u8 ttl; __u8 protocol; // 1--icmp 6---tcp 17---udp __sum16 check; __be32 saddr; __be32 daddr; /*The options start here. */ }; ......................................................................... #include <linux/tcp.h> struct tcphdr { __be16 source; __be16 dest; __be32 seq; __be32 ack_seq; #if defined(__LITTLE_ENDIAN_BITFIELD) __u16 res1:4, doff:4, fin:1, syn:1, rst:1, psh:1, ack:1, urg:1, ece:1, cwr:1; #elif defined(__BIG_ENDIAN_BITFIELD) __u16 doff:4, res1:4, cwr:1, ece:1, urg:1, ack:1, psh:1, rst:1, syn:1, fin:1; #else #error "Adjust your <asm/byteorder.h> defines" #endif __be16 window; __sum16 check; __be16 urg_ptr; } ......................................................................... #include <linux/if_ether.h> struct ethhdr { unsigned char h_dest[6]; unsigned char h_source[6]; __be16 h_proto;//0x0806---arp,0x0800--ip,0x0835---rarp. } ......................................................................... #include <linux/...//暫時沒找到位置> struct arphdr { unsigned short hard_type;//硬體型別,通常0x0001(乙太網) unsigned short protocol;//協議型別,通常0x0800(IP) unsigned char hard_length; ..... unsigned short operation_type;//操作型別,1,ARP請求,2,ARP應答 //參考http://baike.baidu.com/view/121586.htm?fr=aladdin }
相關推薦
網路程式設計標頭檔案小結
網路程式設計的標頭檔案(這裡所有的標頭檔案都在/usr/include目錄下面) 經常被一些標頭檔案搞大,不知到到哪個標頭檔案去找結構。這裡做個總結。 ip頭部 有兩個ip頭部結構,分別是 linux/ip.h 下面結構名字struct iphdr netinet/i
linux網路程式設計常用標頭檔案
sys/types.h:資料型別定義 sys/socket.h:提供socket函式及資料結構 netinet/in.h:定義資料結構sockaddr_in arpa/inet.h:提供IP地址轉換函式 netdb.h:提供設定及獲取域名的函式 sys/ioctl.h:提供
Unix——《Unix網路程式設計》配置unp.h標頭檔案
《Unix網路程式設計 卷1》unp.h 標頭檔案及其編譯問題 本書原始碼下載地址 http://www.unpbook.com 解壓tar -zxvf unpv13e.tar.gz 其實各個編譯過程都在README中,下面給出正確的編譯過程 首
linux 下網路程式設計結構體定義對應的標頭檔案
netinet/if_ether.h ether_arp的資料結構 netinet/ether.h 以太禎的網路位元組和ascii位元組的轉換,包括ether_ntoa(),ether_aton這樣的函式定義 netinet/ip.h 這個標頭檔案和linux/ip.h似乎很相似,也有iphd
Unix網路程式設計之-------unp.h標頭檔案詳細配置-1
unix網路程式設計unp.h最詳細全面配置說明 今天開始學習Unix網路程式設計這本大神之作了,由於之前在學習另外一本傑作Unix環境高階程式設計,遇到過第一個程式編譯報錯的情況,知道這是大神自己寫
對linux下程式設計中用到的標頭檔案頭的一些定義及函式進行解譯(本人使用過程中用到過的不明白的定義及函式)
1、typedef unsigned long int pthread_t; 型別定義: typedef unsigned long int pthread_t; //come from /usr/include/bits/pthreadtypes.h 用途:pthread_t用於宣
《OpenCV3程式設計入門》——“opencv.hpp” 標頭檔案認知
# include <opencv2/opencv.hpp>標頭檔案定義類似如下: # include <opencv2/opencv.hpp> # ifndef_OPENCV_ALL_HPP_ #define_OPENCV_ALL_HPP_
程式設計基礎35 tips stdio.h標頭檔案下的全域性陣列問題
使用<stdio.h>,然後對程式進行c的執行時, 全域性變數中如果使用字串或者是二維字串, 便會出錯。 一, 例如: #include<stdio.h> #include<string.h> const int max_n = 100; ch
Linux CURL安裝及C程式設計中curl.h標頭檔案缺少問題解決
curl安裝 –獲得安裝包,從網上直接下載或者其他途徑,這裡直接wget # wget http://curl.haxx.se/download/curl-7.17.1.tar.gz 此處可以選擇最新版本。官網http://curl.haxx.se/ –解壓到當前目錄
JNi程式設計生成標頭檔案
最近在學習JNI程式設計,但是剛開始就遇到了麻煩,生成不了標頭檔案!!!! 在查找了大量資料之後,終於找到了解決方案: ①先寫一個類,把native方法的呼叫寫在裡面 ②到根目錄下執行javac test.java生成.class檔案 ③回到src目錄,執
C語言程式設計 學習筆記 12.3 多個原始碼檔案、標頭檔案、宣告
我們經常在做“分而治之”的事情(多個.c檔案): 1.main()裡的程式碼太長了適合分成幾個函式 2.一個原始碼檔案太長了適合分成幾個檔案 3.兩個獨立的原始碼檔案不能編譯成可執行的程式 對於(1),我們可以舉以下例子: 有個主函式main.c,有另外一個函式
Linux C程式設計——常用標頭檔案
1 資料型別 1.1 stdint.h uint8_t uint16_t uint32_t 1.2 stdbool.h C語言中是沒有bool型別的(C++中有),若要使用此型別,需要包含標
jni程式設計,使用javah命令生成方法簽名標頭檔案
最近使用javah命令生成方法簽名標頭檔案,百度到的方法多有問題,後來採用如下方法解決: 1、Windows中在開始選單中命令列輸入cmd,進入命令列選單 2、進入eclipse的工作空間,的當前工程的src目錄下輸入如下命令 D:\workspace\NDKHelloWo
Jni程式設計(二)jni.h 標頭檔案定義分析,以及c/c++呼叫java類的屬性和方法
在第一篇部落格中 我們初步瞭解了jni程式設計的步驟,那接下來我認為極其重要的事情是搞清楚jni.h標頭檔案裡面的結構,包括資料型別和方法的定義等,這些是必須的,否則沒有辦法進行學習,就像寫文章一樣,要先學會寫字是一樣的道理。 首先來看一下jni.h標頭檔案的組成:ps下面
徹底搞明白win32程式設計 .h標頭檔案和.cpp原始檔關係
一.想把專案的全域性引數都放在一個檔案裡,好方便對初始值修改。 步驟: 1.新建一個.h標頭檔案,只宣告引數為全域性變數(注意是宣告!!!)。 2.一定要extern,這才是宣告全域性變數 而且 一定不能賦初值 extern int a;
linux下socket程式設計常用標頭檔案
sys/types.h:資料型別定義 sys/socket.h:提供socket函式及資料結構 netinet/in.h:定義資料結構sockaddr_in arpa/inet.h:提供IP地址轉換函式 netdb.h:提供設定及獲取域名的函式 sys/ioct
條件編譯,標頭檔案,靜態庫,共享庫與多檔案程式設計
本文轉自嵌入式Linux中文站 條件編譯 條件編譯即滿足某些條件的時候編譯某部分程式碼,常用於開發多個版本的程式,當滿足條件A時,編譯出免費版本的軟體,當滿足條件B時,編譯除vip版本的軟體,可以提高程式碼的複用率。條件編譯使用"預處理命令+巨集定義"來實現,更多巨集
idea使用javah一鍵編譯JNI的.標頭檔案
.h標頭檔案中方法命名規範需要用到包名,所以,使用javah編譯jni時工作目錄一定要是在包名父目錄中,否則Exception in thread “main” java.lang.IllegalArgumentException: Not a valid class name:
C語言:解決多個C檔案包含同一標頭檔案引起的檔案重複包含問題
解決多個C檔案包含同一標頭檔案引起的檔案重複包含問題,並給出全域性變數如何定義和宣告的方法. 解決方法: 1. 定義公共檔案: global.c 和global.h 其中, global.c檔案中: #include "global.h" //定義全域性變數 int g
iOS 開發: 解決Xcode7.3 不能自動索引標頭檔案,檔名等問題
iOS 開發: 解決Xcode7.3 不能自動索引標頭檔案,檔名,程式碼補全等問題 解決方案: 開啟Xcode –> Target –> BuildSettings –> Apple LLVM 7.1 -Language-Objective C 下面的 Weak