相關函數: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()釋放。