作者visor (~~~~~~~~~~)
看板C_and_CPP
標題Re: [問題] libpcap 顯示封包來源
時間Thu Jun 10 11:28:51 2010
※ 引述《septemhill (冰淇淋乾杯)》之銘言:
: 程式碼如下:
: 在Linux平台上開發,使用libpcap-0.94
: http://nopaste.csie.org/5ad1b
: 目前在我程式碼中有註解了兩個地方:/* 1 */和/* 2 */
: 兩個地方顯示出來的結果似乎怪怪的
: 把inet_ntoa(daddr)和inet_ntoa(saddr)分行表示時是正常的
: 但是寫成一行時,source和dest顯示的卻會是一樣的資料
: 為什麼寫成一行和寫成兩行結果會差這麼多?
: 還請各位先進指點一下,謝謝
給你看一下 inet_ntoa 的 code 吧
#define INET_NTOA_MAX_LEN 16 /* max 12 digits + 3 '.'s + 1 nul */
char *inet_ntoa_r(struct in_addr in, char buf[INET_NTOA_MAX_LEN])
{
in_addr_t addr = ntohl(in.s_addr);
int i;
char *p, *q;
q = 0;
p = buf + INET_NTOA_MAX_LEN - 1; /* cannot use sizeof(buf) here */
for (i=0 ; i < 4 ; i++ ) {
p = _int10tostr(p, addr & 0xff) - 1;
addr >>= 8;
if (q) {
*q = '.';
}
q = p;
}
return p+1;
}
char *inet_ntoa(struct in_addr in)
{
static char buf[INET_NTOA_MAX_LEN];
return(inet_ntoa_r(in, buf));
}
順便看一下說明
The inet_ntoa() function converts the Internet host address in, given
in network byte order, to a string in IPv4 dotted-decimal notation.
The string is returned in a statically allocated buffer,
which subsequent
calls will overwrite.
不知道你老師要求怎樣,還是你看錯要求了 ??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.36.208.15
推 septemhill:Format: TCP|UDP, srcIP:srcPort, dstIP:dstPort 06/10 11:29
→ septemhill:這是我們抓封包format的要求 06/10 11:29
→ visor:分段顯示就好啦 -.- 有這麼難嗎 06/10 11:30
→ visor:fprintf 又不是規定一次一定要輸出一行 06/10 11:31
→ septemhill:好吧...也只能這樣了,謝謝 06/10 11:31
→ visor:你的輸出只要不要加上 \n 換行 後面自然就會連在一起啦 06/10 11:32