程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> struct protoent結構,getprotobyname 及相關函數

struct protoent結構,getprotobyname 及相關函數

編輯:C++入門知識

在我的嵌入式設備中寫了一個抓包程序,獲取協議號的信息,結果在調用getprotobynumber時老是出錯 返回的protoent結構指針始終為空,打印了調試信息 [cpp]   src_addr:192.168.5.155,dst_addr:180.153.201.235   ip_p=6-------   protoent is NULL!!!!   src_addr:180.153.201.235,dst_addr:192.168.5.155   ip_p=6-------   protoent is NULL!!!!   src_addr:192.168.5.155,dst_addr:180.153.201.235   ip_p=6-------   protoent is NULL!!!!   src_addr:180.153.201.235,dst_addr:192.168.5.155   ip_p=6-------   protoent is NULL!!!!         在網上查到關於這個函數的博客,http://yadang418.blog.163.com/blog/static/2684365620096101121612/   裡面有一句話”此函數會從 /etc/protocols中查找符合條件的數據並由結構protoent返回“,才想到我的設備/etc下沒這個文件 復制linux下的進去試試,再運行,ok了!! [cpp]   src_addr:192.168.5.152,dst_addr:238.8.8.8   ip_p=17-------   pro_name :udp   udp src_port:60597,dst_port:11111   src_addr:192.168.5.30,dst_addr:255.255.255.255   ip_p=17-------   pro_name :udp   udp src_port:3601,dst_port:3600   src_addr:192.168.5.152,dst_addr:238.8.8.8   ip_p=17-------   pro_name :udp   udp src_port:60597,dst_port:11111   src_addr:192.168.5.152,dst_addr:238.8.8.8   ip_p=17-------   pro_name :udp   udp src_port:60597,dst_port:11111       相關函數:getprotobyname, getprotoent, setprotoent, endprotoent 表頭文件:#include <netdb.h> 函數定義:struct protoent *getprotobynumber(int proto) 函 數說明:getprotobynumber()會返回一個protoent結構,參數proto為欲查詢的網絡協議編號。此函數會從 /etc/protocols中查找符合條件的數據並由結構protoent返回。 結構protoent定義請參getprotoent() 返回值   :成功則返回protoent結構指印,若有錯誤或找不到各個符合的數據則返回NULL指針   struct protoent結構        [cpp]   /* Description of data base entry for a single service.  */   struct protoent   {     char *p_name;         /* Official protocol name.  */     char **p_aliases;     /* Alias list.  */     int p_proto;          /* Protocol number.  */   };       getprotobyname():依照通訊協定 (protocol) 的名稱來獲取該通訊協定的其他資料。    格 式: struct protoent * getprotobyname( const char *name );    參 數: name   通訊協定名稱    傳回值: 成功 - 一指向 struct protoent 的指針         失敗 - NULL           說明: 利用通訊協定的名稱來得知該通訊協定的別名、編號等資料。    getprotobynumber():依照通訊協定的編號來獲取該通訊協定的其他資料。    格 式: struct protoent * getprotobynumber( int number );    參 數: number  以 host 排列方式的通訊協定編號    傳回值: 成功 - 一指向 struct protoent 的指針         失敗 - NULL     說明: 利用通訊協定的編號來得知該通訊協定的名稱、別名等資料。  =============2.6.31內核================ [cpp]   /* Open protocol data base files and mark them as staying open even     after a later search if STAY_OPEN is non-zero.     This function is a possible cancellation point and therefore not     marked with __THROW.  */   extern void setprotoent (int __stay_open);      /* Close protocol data base files and clear `stay open' flag.     This function is a possible cancellation point and therefore not     marked with __THROW.  */   extern void endprotoent (void);      /* Get next entry from protocol data base file.  Open data base if     necessary.     This function is a possible cancellation point and therefore not     marked with __THROW.  */   extern struct protoent *getprotoent (void);      /* Return entry from protocol data base for network with NAME.     This function is a possible cancellation point and therefore not     marked with __THROW.  */   extern struct protoent *getprotobyname (__const char *__name);      /* Return entry from protocol data base which number is PROTO.     This function is a possible cancellation point and therefore not     marked with __THROW.  */   extern struct protoent *getprotobynumber (int __proto);    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved