getprotobyname 以及struct protoent結構

相關函數:getprotobyname, getprotoent, setprotoent, endprotoent
表頭文件:#include <netdb.h>
函數定義:struct protoent *getprotobynumber(int proto)
函數說明:getprotobynumber()會返回一個protoent結構,參數proto爲欲查詢的網絡協議編號。此函數會從 /etc/protocols中查找符合條件的數據並由結構protoent返回。 結構protoent定義請參getprotoent()
返回值   :成功則返回protoent結構指印,若有錯誤或找不到各個符合的數據則返回NULL指針

範例:
/*取得協議編號0到4的協議數據*/

#include <netdb.h>
main()
{
    int number;
    struct protoent *protocol;
    for(number=0; number<5; number++)
   {
       protocol = getprotobynumber(number);
       if(protocol == (struct protoent * ) NULL) continue;
       printf("%2d: %-10s: %-10s/n", protocol->p_proto, protocol->p_name, protocol->p_aliases[0]);
   }
}

 

例如 :6  對應名字是  tcp

17  對應名字是 UDP

 

 

struct protoent結構

在snort.c中的函數void InitProtoNames()的作用是取得協議名放在protocol_names[256]       
struct protoent { 
        char *       p_name; //名稱
        char *               p_aliases; //別名
        short *       p_proto; //編號
       }  
getprotobyname():依照通訊協定 (protocol) 的名稱來獲取該通訊協定的其他資料。 
  格 式: struct protoent * getprotobyname( const char *name ); 
  參 數: name   通訊協定名稱 
  傳回值: 成功 - 一指向 struct protoent 的指針 

       失敗 - NULL  說明: 利用通訊協定的名稱來得知該通訊協定的別名、編號等資料。 
getprotobynumber():依照通訊協定的編號來獲取該通訊協定的其他資料。 
  格 式: struct protoent * getprotobynumber( int number ); 
  參 數: number  以 host 排列方式的通訊協定編號 
  傳回值: 成功 - 一指向 struct protoent 的指針 
       失敗 - NULL  
  說明: 利用通訊協定的編號來得知該通訊協定的名稱、別名等資料。 

另外,:-)
toupper(char c)將字符c轉換爲大寫英文字母。
d = strdup(char * s)複製字符串s到d,返回指向被複制的字符串的指針,所需空間由malloc()分配且可以由free()釋放。

發佈了37 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章