亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5608 | 回復(fù): 9
打印 上一主題 下一主題

[內(nèi)核模塊] 在內(nèi)核中從skb打印ip地址,老是當(dāng)機。。。 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-08-25 15:36 |只看該作者 |倒序瀏覽


       下面是代碼:

      unsigned int hook_printip(unsigned int hooknum,
        struct sk_buff **skb,
        const struct net_device *in,
        const struct net_device *out,
        int (*okfn)(struct sk_buff*))
{
   
    struct sk_buff *sb=*skb;
    struct iphdr *iph;
    //iph=(struct iphdr*)(skb_network_header(sb));
    iph=(struct iphdr*)ip_hdr(sb);
  //  printk(KERN_INFO "src IP%d.%d.%d.%d\n",NIPQUAD(iph->saddr));
    printk(KERN_INFO "%d.%d.%d.%d\n",NIPQUAD(iph->daddr));
   // printk(KERN_INFO "src ip %pI4\n",&iph->saddr);
    //printk(KERN_INFO "src ip \n");
    return NF_ACCEPT;
}

真的不知道哪里有問題,,skbuff結(jié)構(gòu)改了后。。。。。。

論壇徽章:
6
金牛座
日期:2013-10-08 10:19:10技術(shù)圖書徽章
日期:2013-10-14 16:24:09CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34獅子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亞洲杯之阿聯(lián)酋
日期:2015-05-09 14:36:15
2 [報告]
發(fā)表于 2014-08-25 15:50 |只看該作者
回復(fù) 1# 雷鋒不謝
真的不知道哪里有問題,,skbuff結(jié)構(gòu)改了后。。。。。。

你的貼的代碼應(yīng)該是沒什么問題,關(guān)鍵就是你到底對內(nèi)核干了什么

   

論壇徽章:
0
3 [報告]
發(fā)表于 2014-08-25 16:25 |只看該作者
回復(fù) 1# 雷鋒不謝
你在寫netfilter的代碼嗎?哪個版本的內(nèi)核?我看的代碼中第二個參數(shù)是struct sk_buff *skb,不是struct sk_buff **skb。

   

論壇徽章:
0
4 [報告]
發(fā)表于 2014-08-25 17:18 |只看該作者
回復(fù) 2# 瀚海書香


    就是在某個鉤子點勾包,然后打印其ip,但是,一旦加載進去,如果有數(shù)據(jù)包經(jīng)過電腦,就當(dāng)機了。

不知道是不是ip頭部沒找對還是怎么的,

論壇徽章:
0
5 [報告]
發(fā)表于 2014-08-25 17:20 |只看該作者
ycnian 發(fā)表于 2014-08-25 16:25
回復(fù) 1# 雷鋒不謝
你在寫netfilter的代碼嗎?哪個版本的內(nèi)核?我看的代碼中第二個參數(shù)是struct sk_buff * ...


2.6.32

hook函數(shù)里面的都是sk_buff** ,  不過這沒影響吧,* 和** 都可以,只是在用的時候注意就行了。。。

論壇徽章:
0
6 [報告]
發(fā)表于 2014-08-25 17:24 |只看該作者
ycnian 發(fā)表于 2014-08-25 16:25
回復(fù) 1# 雷鋒不謝
你在寫netfilter的代碼嗎?哪個版本的內(nèi)核?我看的代碼中第二個參數(shù)是struct sk_buff * ...



哎呀, 還真是這個問題。

我看代碼是2.6.20的,但機子上面是2.6.32的。所以就誤導(dǎo)了。

話說這年頭內(nèi)核變化真快。。  謝謝啦。。

論壇徽章:
6
金牛座
日期:2013-10-08 10:19:10技術(shù)圖書徽章
日期:2013-10-14 16:24:09CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34獅子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亞洲杯之阿聯(lián)酋
日期:2015-05-09 14:36:15
7 [報告]
發(fā)表于 2014-08-25 18:27 |只看該作者
回復(fù) 6# 雷鋒不謝
我看代碼是2.6.20的,但機子上面是2.6.32的。所以就誤導(dǎo)了。

話說這年頭內(nèi)核變化真快。。  謝謝啦。。

好吧。你編譯的時候居然沒有報錯?

   

論壇徽章:
0
8 [報告]
發(fā)表于 2014-08-25 19:34 |只看該作者
瀚海書香 發(fā)表于 2014-08-25 18:27
回復(fù) 6# 雷鋒不謝

好吧。你編譯的時候居然沒有報錯?



還是有點問題,我打印tcp的端口的時候,感覺不對,你看看。。。。

void printpacket(struct sk_buff*skb)
{
    struct ethhdr *eth;
    struct iphdr  *iph;
    struct tcphdr *tcph;//假定該packet為tcp包

    eth=eth_hdr(skb);
    iph=ip_hdr(skb);
    tcph=tcp_hdr(skb);

    int i;

    printk("mac dst:");
    for(i=0;i<6;i++)
        printk("%02x ",eth->h_dest);
    printk("\n");

    printk("mac src:");
    for(i=0;i<6;i++)
        printk("%02x ",eth->h_source);
    printk("\n");

    printk("ip src:%pI4\n",&iph->saddr);//這是專門打印ip的格式,注意,參數(shù)為指針。
    printk("ip dst:%pI4\n",&iph->daddr);//這是專門打印ip的格式,注意,參數(shù)為指針。
    //printk("ip src :%u.%u.%u.%u",NIPQUAD(iph->saddr));//用NIPQUAD也是可以滴。。

    printk("tcp srcport:%d\n",ntohs(tcph->source));
    printk("tcp dstport:%d\n",ntohs(tcph->dest));
}

最后兩行。。。。


和wireshark里面輸出的不是一樣的。

論壇徽章:
6
金牛座
日期:2013-10-08 10:19:10技術(shù)圖書徽章
日期:2013-10-14 16:24:09CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34獅子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亞洲杯之阿聯(lián)酋
日期:2015-05-09 14:36:15
9 [報告]
發(fā)表于 2014-08-25 20:56 |只看該作者
回復(fù) 8# 雷鋒不謝
void printpacket(struct sk_buff*skb)
{
    struct ethhdr *eth;
    struct iphdr  *iph;
    struct tcphdr *tcph;//假定該packet為tcp包

    eth=eth_hdr(skb);
    iph=ip_hdr(skb);
    tcph=tcp_hdr(skb);

    int i;

    printk("mac dst:");
    for(i=0;i<6;i++)
        printk("%02x ",eth->h_dest);
    printk("\n");

    printk("mac src:");
    for(i=0;i<6;i++)
        printk("%02x ",eth->h_source);
    printk("\n");

    printk("ip src:%pI4\n",&iph->saddr);//這是專門打印ip的格式,注意,參數(shù)為指針。
    printk("ip dst:%pI4\n",&iph->daddr);//這是專門打印ip的格式,注意,參數(shù)為指針。
    //printk("ip src :%u.%u.%u.%u",NIPQUAD(iph->saddr));//用NIPQUAD也是可以滴。。

    printk("tcp srcport:%d\n",ntohs(tcph->source));
    printk("tcp dstport:%d\n",ntohs(tcph->dest));
}



1. 你為什么假定為tcp。考觽判斷就那么難?
     if (iph->protocol != IPPROTO_TCP)
                  return NF_ACCEPT;
2. 取tcphdr的方法有問題
      tcp_hdr(skb)的方法只能在傳輸層調(diào)用,那個時候已經(jīng)設(shè)置好了傳輸層的頭(比如ip_local_deliver_finish函數(shù)中調(diào)用set_reset_transport_header),可以直接調(diào)用了。
      而你現(xiàn)在的hook在ip層,需要使用如下方法取得tcp頭
      
      struct tcphdr _tcph, *th;
      th = skb_header_pointer(skb, ip_hdrlen(skb),
                                sizeof(_tcph), &_tcph);

論壇徽章:
0
10 [報告]
發(fā)表于 2014-08-26 21:24 |只看該作者
回復(fù) 9# 瀚海書香


    膜拜,以后有問題可以向你請教么///
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP