亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
netfilter在NF_ARP_IN處HOOK不到數(shù)據(jù),各位幫忙分析下
[打印本頁]
作者:
FlankerSky
時間:
2013-10-08 21:42
標(biāo)題:
netfilter在NF_ARP_IN處HOOK不到數(shù)據(jù),各位幫忙分析下
代碼如下:
unsigned int hook_arp_in(unsigned int hooknum,
struct sk_buff **sb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
int NIC = -1;
printk(" hook_arp_in!!!\n");
if(*sb)
function(*sb);
return NF_STOLEN;
}
....
nfarp_in.hook = hook_arp_in;
nfarp_in.hooknum = NF_ARP_IN;
nfarp_in.pf = NF_ARP;
nfarp_in.owner = THIS_MODULE;
if(nf_register_hook(&nfarp_in) < 0)
printk("register_hook failed!!!!\n");
....
把代碼的其他地方都注釋掉了,基本就剩了上面的這點代碼。加載模塊之后,根本不會進(jìn)到 hook_arp_in()里面,而且系統(tǒng)的arp的過程沒受影響。
但是,我將這個nfarp_in.pf = NF_ARP 換成 nfarp_in.pf = NFPROTO_ARP 后,會進(jìn)入到hook_arp_in,但是判斷sb的時候,始終為空,進(jìn)入不到function( )里。
我的內(nèi)核版本是3.2.6。希望各位幫忙分析下
作者:
FlankerSky
時間:
2013-10-09 07:30
沒人?自己頂頂。感覺這東西就是標(biāo)準(zhǔn)的,按照格式來就不會出錯。但是真的沒有hook到數(shù)據(jù)包。是不是跟內(nèi)核的相關(guān)設(shè)置有關(guān)?
作者:
Godbach
時間:
2013-10-09 09:17
回復(fù)
1#
FlankerSky
unsigned int hook_arp_in(unsigned int hooknum,
struct sk_buff **sb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
復(fù)制代碼
看下這個 hook 接口的 skb 參數(shù)類型用的是否正確。
作者:
混沌老仙
時間:
2013-10-09 09:32
具體還是得看一下內(nèi)核是如何處理arp的,看源碼吧。
作者:
FlankerSky
時間:
2013-10-09 09:55
回復(fù)
3#
Godbach
謝謝版主提醒,代碼是參考網(wǎng)上的,hook_arp_in()有個參數(shù)struct sk_buff **skb,改為struct sk_buff *skb(參考內(nèi)核里的相關(guān)代碼)后,真的好使了,能hook到arp的數(shù)據(jù)包了,但是還是不知道為什么?雙指針不是一樣嗎?
作者:
FlankerSky
時間:
2013-10-09 09:56
回復(fù)
4#
混沌老仙
謝謝,參考了內(nèi)核的相關(guān)代碼,改了一下函數(shù)的參數(shù)形式 ,可以hook到arp了。
作者:
Godbach
時間:
2013-10-09 10:12
回復(fù)
5#
FlankerSky
參數(shù)類型都不一樣,怎么能保證好使呢。從 C 語言的角度上看,你多了一級解引用
作者:
FlankerSky
時間:
2013-10-09 10:45
回復(fù)
7#
Godbach
嗯,謝謝斑竹,明白了。剛才也看了下2.6.0的內(nèi)核源碼,確實,hook函數(shù)的接口發(fā)生變化了,所以才導(dǎo)致的上述錯誤。
作者:
Godbach
時間:
2013-10-09 11:35
回復(fù)
8#
FlankerSky
論壇里有多個帖子基本上都是像 LZ 這樣的問題,原因也一樣。
內(nèi)核接口不是穩(wěn)定了,不同版本之間都有可能變化。因此,使用一些實例代碼的時候,千萬要看清楚人家的內(nèi)核版本,以及自己的內(nèi)核版本,并比較一些重要接口是否發(fā)生了變化。
作者:
FlankerSky
時間:
2013-10-09 12:15
回復(fù)
9#
Godbach
恩恩,,學(xué)習(xí)了!
作者:
liudeyi545
時間:
2014-12-30 15:38
樓主您好,請問您這個功能函數(shù)里具體是怎么寫的呢?我想獲取ARP包的原MAC地址,可是不能實現(xiàn),請您幫忙告知一下可以嗎,謝謝!
作者:
liudeyi545
時間:
2014-12-30 15:40
您好,我看了您對ARP報文的這篇帖子的回復(fù),我這里也遇到了一些問題,想獲取ARP報文的原MAC地址,可是沒成功!
unsigned int hook_func(unsigned int hooknum,struct sk_buff *skb,const struct net_device *in,const struct net_device *out,int (*okfn)(struct sk_buff *))
{
char buffer[20];
u8 haddr[20];
struct ether_arp *eth;
eth=(struct ether_arp *)skb_mac_header(skb);
printk("hehe:%x\n",eth->arp_sha);
memcpy(haddr,eth->arp_sha,6);
sprintf(buffer,"%02x:%02x:%02x:%02x:%02x:%02x",haddr[0],haddr[1],haddr[2],haddr[3],haddr[4],haddr[5]);
//printk("love: %s\n",buffer);
if(strcmp(buffer,"dc:0e:a1:e8:94:d6")==0)
return NF_ACCEPT;
else
return NF_DROP;
}
回復(fù)
9#
Godbach
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2