• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            saga's blog

            突出重點,系統全面,不留死角

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              33 Posts :: 2 Stories :: 185 Comments :: 0 Trackbacks

            公告

            QQ:34O859O5

            常用鏈接

            留言簿(15)

            搜索

            •  

            積分與排名

            • 積分 - 211484
            • 排名 - 123

            最新評論

            閱讀排行榜

            評論排行榜

            最近用winpcap編程發現winpcap不能直接的提取本地網卡的mac地址.
            ???? 于是通過向自己發arp請求來獲得本地的mac.自己寫了段代碼,如下:

            int ?getmmac()
            {???
            ????unsigned?
            char ???sendbuf[ 42 ];
            ????
            int ????i = 7 ,k;
            ????ETHDR??eth;
            ????ARPHDR?arp;
            ????
            struct ?pcap_pkthdr? * ??pkt_header;
            ????u_char?
            * ?pkt_data;?

            ????
            for (k = 0 ;k < 6 ;k ++ )
            ????{
            ????????eth.eh_dst[k]
            = 0xff ;
            ????????eth.eh_src[k]
            = 0x0f ;
            ????????arp.arp_sha[k]
            = 0x0f ;
            ????????arp.arp_tha[k]
            = 0x00 ;
            ????}
            ????eth.eh_type
            = htons(ETH_ARP);
            ????arp.arp_hdr
            = htons(ARP_HARDWARE);
            ????arp.arp_pro
            = htons(ETH_IP);
            ????arp.arp_hln
            = 6 ;
            ????arp.arp_pln
            = 4 ;
            ????arp.arp_opt
            = htons(ARP_REQUEST);
            ????arp.arp_tpa
            = myip -> ip;
            ????arp.arp_spa
            = inet_addr( " 127.0.0.2 " );

            ????memset(sendbuf,
            0 , sizeof (sendbuf));
            ????memcpy(sendbuf,
            & eth, sizeof (eth));
            ????memcpy(sendbuf
            + sizeof (eth), & arp, sizeof (arp));

            ????
            if (pcap_sendpacket(slecadopt,sendbuf, 42 ) == 0 )
            ????{
            ????????printf(
            " PacketSend?succeed\n\n " );
            ????}
            ????
            else
            ????{
            ????????printf(
            " PacketSendPacket?in?getmine?Error:?%d\n " ,GetLastError());
            ????????
            return ? 0 ;
            ????}
            ????
            ????
            while ((k = pcap_next_ex(slecadopt, & pkt_header,( const ?u_char ** ) & pkt_data)) >= 0 )
            ????{???????
            ????????
            if ( * (unsigned? short ? * )(pkt_data + 12 ) == htons(ETH_ARP) &&* (unsigned? short * )(pkt_data + 20 ) == htons(ARP_REPLY) &&* (unsigned? long * )(pkt_data + 38 ) == inet_addr( " 127.0.0.2 " ))
            ????????{
            ????????????
            ????????????
            for (i = 0 ;i < 6 ;i ++ )
            ????????????{
            ????????????????myip
            -> mac[i] =* (unsigned? char * )(pkt_data + 22 + i);
            ????????????}
            ????????????????
            break ;
            ????????}
            ????}
            ????
            if (i == 6 )
            ????{
            ????????
            return ? 1 ;
            ????}
            ????
            else
            ????{
            ????????
            return ? 0 ;
            ????}
            }

            寫的是一個函數,其中arp請求的發送方地址填的是127.0.0.2.這個都沒什么關系.
            當然提取本地的mac還可以用api直接獲取.但是不知道用pcap還有別的好方法.高手指教.謝謝
            posted on 2006-04-13 15:02 saga.constantine 閱讀(4740) 評論(8)  編輯 收藏 引用 所屬分類: Winpcap

            Feedback

            # re: [原創]用winpcap獲取本地mac的一段代碼! 2006-05-08 15:39 oosky
            pcap_next_ex
            pcap_loop
            這兩個函數抓到的是通過網卡的原始數據包還是被網卡過濾后的IP包?
            對這些包的格式不了解,進而不好分析包的結構。
            郁悶中。  回復  更多評論
              

            # re: [原創]用winpcap獲取本地mac的一段代碼! 2006-05-09 08:25 saga.constantine
            @oosky
            打開網卡時設為混雜模式,抓到的就應該是原始數據包!!但是不會包括線路上損壞了的數據包,那要用硬件嗅探.
            自己可以設置過濾,是通過過濾函數結合過濾表達式的實現的,那樣抓到的包就應該式過濾后的包了.不一定是ip包,內網的arp包等也會有!
            對包的結構可以找資料看看,再進行分析!
            ip頭和tcp頭的分析都不太難!!
              回復  更多評論
              

            # re: [原創]用winpcap獲取本地mac的一段代碼! 2008-04-25 16:20 牛人
            你真有才。。。
            脫褲子放了個P  回復  更多評論
              

            # 幫助很大!先贊再細讀! 2008-07-04 18:00 Utensil
            我正苦苦尋覓跨平臺的,不依賴于pcap以外的庫的獲得本地mac的方法,搜到了博主的文章...首先思路就很啟發!

            研讀之后會再來回訪請教~  回復  更多評論
              

            # re: [原創]用winpcap獲取本地mac的一段代碼! 2008-07-05 08:30 Utensil
            其他地方參照http://www.libing.net.cn/read.php/837.htm都看明白了

            請教:
            既然
            unsigned long myip; //本地主機IP
            為何會有
            arp.arp_tpa = myip -> ip;
            myip -> mac[i] =* (unsigned char * )(pkt_data + 22 + i);

            myip并不是一個結構啊?

            我現在頭疼的也正是這個目標IP,我是在尚未上線(802.1x協議認證)的情況下,需要獲得本地MAC。

            改成發到localhost(127.0.0.1)行不行呢 ?  回復  更多評論
              

            # re: [原創]用winpcap獲取本地mac的一段代碼! 2008-07-05 08:33 Utensil
            另外一個地方:

            eth.eh_src[k] = 0x0f ;

            0F:0F:0F:0F:0F:0F是什么的MAC啊?  回復  更多評論
              

            # re: [原創]用winpcap獲取本地mac的一段代碼! 2008-07-08 14:23 saga
            0f 可能是隨意添加的 我也記不太清楚了  回復  更多評論
              

            # re: [原創]用winpcap獲取本地mac的一段代碼! 2010-07-08 13:01 zuoliang.
            開發例子包里有通過packet.dll得到mac的例子。  回復  更多評論
              

            久久99精品国产自在现线小黄鸭 | 99久久国产精品免费一区二区 | 狠狠色丁香久久婷婷综合| 蜜臀久久99精品久久久久久| 久久免费视频1| 久久久久久久女国产乱让韩| 亚洲国产欧美国产综合久久| 国产91久久精品一区二区| 伊人久久综合热线大杳蕉下载| 久久e热在这里只有国产中文精品99 | 久久综合综合久久97色| 精品国产综合区久久久久久 | 亚洲欧美精品一区久久中文字幕 | 久久综合九色综合久99| 午夜不卡久久精品无码免费| 日本道色综合久久影院| 国产精品久久久久免费a∨| 国产精品美女久久久| 久久青青草视频| 久久精品成人欧美大片| 韩国免费A级毛片久久| 久久这里有精品| 久久亚洲电影| 99久久综合狠狠综合久久| 久久精品国产亚洲av影院| 尹人香蕉久久99天天拍| 国产亚洲精久久久久久无码AV| 一本色综合网久久| 久久亚洲精品无码aⅴ大香| 久久99精品久久久久久9蜜桃| 国产69精品久久久久777| 亚洲国产精品无码久久一区二区| 亚洲国产香蕉人人爽成AV片久久| 久久香蕉综合色一综合色88| 99久久777色| 99久久精品国产麻豆| 久久精品国产亚洲AV高清热 | 久久精品国产精品国产精品污| 亚洲午夜久久久| 一本大道久久香蕉成人网| 久久精品中文字幕第23页|