• 熱門專題

WinPcap開發(一)_锈水财阀声望:零基礎入門

作者|_-顺贷网:追影人  發布日期|_亿发彩票坑:2016-05-06 21:33:13
Tag標簽-_长春花卉市场:基礎  
  • 網絡編程在網絡安全方麵具有舉足輕重的作用||长沙租房口碑网,如何快捷高效的監聽__娘家的故事3主题曲、分析_雷霆扫毒谁是黑警、構造網絡流量-|喜孕宝,成為很多安全從業者需要解決的重點問題-|青岛火车站咨询电话。而winpcap這一免費開源項目恰好可以為win32應用程序提供訪問網絡底層的能力|--网络知识学习,所以其成為了相關網絡編程的首選開發工具-虞城县教育网。
    0×01 winpcap是什麼_-jthysh?
    winpcap(windows packet capture)是windows平台下一個免費的網絡訪問係統-虚拟社区游戏,可用於windows係統下的網絡編程-2240七星彩图规论坛。著名的wireshark便是基於winpcap開發的-|堂色品,大家在安裝wireshark中可以看到winpcap驅動程序的安裝過程-江苏移动商城币兑换。
    有關winpcap的介紹網絡上很多|||hp3808,百科裏麵介紹的也很詳細__运盛彩票的网址,我就不再copy了-|西安都市快报直播。需要注意的一點是|_-长号查短号,winpcap並不是一個簡單的library_--西装排名,而是一個針對Win32平台上的抓包和網絡分析的一個架構-|赢彩彩票可靠吗,它包括一個核心態的包過濾器--_双城市政府网,一個底層的動態鏈接庫(packet.dll)和一個高層的不依賴於係統的庫(wpcap.dll)|-|电大作业答案网。所以它隻能“嗅探”到物理線路上的數據包|亿彩官网下载安装,而不具備攔截的能力_魅力研习所,因此不適用於個人防火牆等項目||中国卫生人才网成绩查询2017。
    0×02 你需要準備些什麼?
    本係列文章主要帶大家認識和了解如何利用winpcap網絡編程技術進行網絡的協議分析_易购彩票、流量統計及網絡探測掃描等_|我们都爱笑0913,這裏我們並不會去深硬的解讀相關源代碼_花狸猫娱乐社区,而是以輕鬆的方式結合實驗來對相關原理進行深入理解|金鼎一级大豆油。在本係列文章中__|提手旁上下,筆者從簡到難-_|优博博彩,簡明介紹winpcap架構原理-|_盈众彩票、相關環境搭建及快速編寫核心代碼_-_铠甲勇士刑天后传全。但是在開始前__雪碧真我篮球,讀者需要有一些相關基礎---234下载彩票软件:了解網絡協議相關基礎知識||_单身公主相亲记优酷,掌握一門winpcap開發庫支持的編程語言|__600021,自己能動手實踐編寫一些例子_聚返吧。Winpcap提供的開發接口原生是c語言的|_-陕西2台都市快报,不過熱心腸的程序猿們已經為其他語言的使用提供了封裝|_沈阳酷狗俱乐部,比如java|||3a录取查询、.net_--姜宁转会费、python-|头彩饰品,好像連易語言都有_ilux me。本係列文章將使用c語言來進行各種實驗__|模特李娟,有興趣的讀者可以將其轉換成自己熟悉的語言來動手實踐|-草榴域名。
    0×03 你能學到什麼__|有线电视接收器?
    有關winpcap開發的文章在網上很容易找到_诺基亚n97功能,但是更多的都是對於代碼的講解_-|手写查字,筆者在本文盡量係統性的從原理層麵結合各個應用場景來介紹相關知識-至尊娱乐彩票真的假的:
    1.   Winpcap獲取網卡基本信息及收發數據包
    2.   存活主機探測
    3.   端口掃描
    4.   Arp欺騙
    5.   中間人攻擊的簡單實現
    6.    流量統計與分析
    0×04 知識補充
    進行下麵的介紹前|009彩票网,我們需要了解幾個名詞的關係__钢结构楼梯图集。
    winpcap(windows packet capture)是windows平台下一個免費的網絡訪問係統-_|128彩票网安全吗,可用於windows係統下的網絡編程-__360彩票购彩大厅官网。linux 平台下對應的開發包是libpcap-_|舒淇facebook。
    Wireshark是基於winpcap處理網絡驅動層_|易家通。
    Wpdpack是winpcap的開發包_--其实不想走简谱,提供開發相關程序的接口-华为畅享7c。
    0×05 環境準備
    首先根據你所選擇的開發語言選擇對應的編譯器--勇士vs步行者,筆者使用c語言-|u9u8,利用VS2012進行相關開發|儒林外史简介。

     
    安裝好編譯器後-|腾宇铭,進行相關配置|--西安烟草网上订货。下載wpdpack點擊這裏
    初學者可以選擇裏麵的Examples進行編譯-|-花童头,可以看到找不到頭文件-|郸城黑社会,及相關庫-|游彩网官方首页。
     

     
    這是因為wpdpack中的相關庫還沒有引入到編譯環境中

     
    將wpdpack包中的Include和lib文件夾中的文件添加到VS的相關目錄下即可編譯通過__-1比1现金兑换捕鱼游戏。將編譯後的程序進行運行則出現以下錯誤__花瑜。

     
    這是由於運行時缺乏動態鏈接庫導致||金够败,最簡單的方法是直接下載並安裝winpcap驅動程序 下載
    如果你覺得這樣子很麻煩--锡纸钥匙,也可以采用簡易方法|_168极速开奖结果。程序在運行時隻需要winpcap在system32下麵釋放的wpcap.dll和packet.dll_北京人体模特,還有driver下麵的npf.sys_-保定热线测网速,所以不需要完整安裝winpcap||-银河彩票网址,而選擇隻複製以上三個文件到對應目錄中即可-360彩票网官网。
    本節筆者將采用著名的Arpspoof源碼進行相關講解---永城彩票网平台,源碼下載地址http://www.verysource.com/code/2287464_1/arpspoof.cpp.html
    0×06 枚舉可用網絡適配器資源
    在使用winpcap進行收發數據包時-亿彩最新版本,需指定對應的網卡_-十六楼影视,所以有必要列出計算機上所有可用的網絡適配資源_订舱代理。
    列取網卡信息的核心代碼__-0567好彩官方版下载:
    //該函數在Arpspoof程序中||_芝兰粉,筆者進行了詳細注釋
    void ListAdapters()
    {
     pcap_if_t *alldevs;//用於存儲網卡鏈表的頭指針
     pcap_if_t *d;//用於遍曆網卡鏈表的臨時變量
        int i = 0;//記錄網卡個數
    char errbuf[PCAP_ERRBUF_SIZE];//存儲錯誤信息
    char szGateIPAddr[16];//網卡對應網關地址
    char *p;//網卡名詞
     char szIPAddr[16];//網卡對應IP
     unsigned char ucPhysicalAddr[6];//網卡對應的MAC地址
        if (pcap_findalldevs(&alldevs, errbuf) == -1)//獲取網卡鏈表
        {
            fprintf(stderr,"Error in pcap_findalldevs: %s ", errbuf);
            return;
        }
        for (d=alldevs; d; d=d->next)//遍曆網卡鏈表
        {
            if (d->addresses != NULL && (p = strchr(d->name, '{')) != NULL

       && Getadapterbyname(p, szIPAddr, ucPhysicalAddr,szGateIPAddr))//獲取網卡的對應信息
      {
       for(int j = strlen(d->description) - 1; j > 0; j--)//對網卡的描述信息格式化
       {
        if (d->description[j] == 0x20)
         d->description[j] = '';
        else
         break;
       }
       printf("   %d. %s IP Address. . . . . : %s ", i, d->description, szIPAddr);//格式化輸出網卡信息
       printf(" Physical Address. . : %.2X-%.2X-%.2X-%.2X-%.2X-%.2X ",
        ucPhysicalAddr[0], ucPhysicalAddr[1], ucPhysicalAddr[2],
        ucPhysicalAddr[3], ucPhysicalAddr[4], ucPhysicalAddr[5]);
       printf(" Default Gateway . . : %s ", szGateIPAddr);
       i ++;
      }
        } 
        if (i==0)
        {
            printf(" No interfaces found! Make sure WinPcap is installed. ");
            return;
        }
     
        pcap_freealldevs(alldevs);//釋放網卡鏈表
    }
    科普Tips|_|惜春小礼阅读答案:
    “網卡”是神馬-__盈彩靠谱吗?
    計算機與外界局域網的連接是通過主機箱內插入一塊網絡接口板(或者是在筆記本電腦中插入一塊PCMCIA卡)|-手动过滤机。網絡接口板又稱為通信適配器或網絡適配器(network adapter)或網絡接口卡NIC(Network Interface Card)__|cctv11在线直播电视,但是更多的人願意使用更為簡單的名稱“網卡”|易彩娱乐是黑平台吗。
    利用上麵的程序|-著名现代诗,我們可以查看計算機上可利用的所有網卡資源-_陈进平,以便選擇相應的網卡資源進行相關操作_免费空间克隆。為了便於觀察_惜春小礼阅读答案,我們在VMware虛擬機中進行|__众彩平台是合法的吗,首先在對應的虛擬機設置中增加硬件選項中添加多塊網卡__小爸爸13集插曲,然後配置相應的IP_093网络彩票,運行程序_|-最新电子产品,可以得到對應網卡的名稱描述_|-英国梧桐、IP地址||_求购东北大米、MAC地址等|_-村村通卫星电视升级。


    0×07 如何構造和發送數據包
    上一步我們列出了所有的可用網卡資源__|韩衣衣,在發送數據包前-评剧发源地,需要打開對應的網卡來進行發送數據包的操作|灵宝党政网。這裏使用的函數是pcap_open_live---nokia pc套件官方下载:
    函數名稱_-杜香油:pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)
    函數功能___钩藤茶:獲得用於捕獲網絡數據包的數據包捕獲描述字_|蒙牛纯牛奶图片。
    參數說明--_劫机哥:device參數為指定打開的網絡設備名||诺基亚6120c游戏。snaplen參數定義捕獲數據的最大字節數|-|2019最新买足彩软件。promisc指定是否將網絡接口置於混雜模式_|_3分时时彩开奖结果。to_ms參數指定超時時間(毫秒)_|制十字架纪念森林。ebuf參數則僅在pcap_open_live()函數出錯返回NULL時用於傳遞錯誤消息---石上藕。
    返回值|--好看的电影网站你懂的:打開的網卡句柄
    Arpspoof中將網卡的打開操作進行了如下封裝--上海大专排名,調用時直接輸入網卡序號即可-_赢彩彩票网站可靠吗,程序會對參數2--|榆树徐大伟、3-中博彩票平台高倍率、4進行初始化設置_--陈二雷:
    pcap_t* OpenAdapter(int uIndexofAdapter, char szIPSelf[],
         unsigned char ucPhysicalAddr[], char szGateIPAddr[])
    {
     pcap_if_t *alldevs;
     pcap_if_t *d;
     pcap_t *fp = NULL;
        int i = 0;
        char errbuf[PCAP_ERRBUF_SIZE], *p;
        /* 這個API用來獲得網卡的列表 */
        if (pcap_findalldevs(&alldevs, errbuf) == -1)
        {
            fprintf(stderr,"Error in pcap_findalldevs: %s ", errbuf);
            return NULL;
        }
        /* 顯示列表的響應字段的內容 */
        for (d=alldevs; d; d=d->next)
        {       
      if (d->addresses != NULL && (p = strchr(d->name, '{')) != NULL
       && Getadapterbyname(p, szIPSelf, ucPhysicalAddr, szGateIPAddr))
      { 
       if (i == uIndexofAdapter)
       {
        if ((fp = pcap_open_live(d->name, // 設備名稱
         65536,     // portion of the packet to capture.
         // 65536 grants that the whole packet will be captured on all the MACs.
         1,       // 混雜模式
         1, //讀超時為1ms___云顶娱乐棋牌捕鱼,越小越好
         errbuf     // error buffer
         )) == NULL)
        {
         fprintf(stderr," Unable to open the adapter.
          %s is not supported by WinPcap ", d->name);
         pcap_freealldevs(alldevs);
         return NULL;

     

        }
        else
        {
         // 去掉網卡注釋右邊的空格
         for(int j = strlen(d->description) - 1; j > 0; j--)
         {
          if (d->description[j] == 0x20)
           d->description[j] = '';
          else
           break;
         }
         printf("[*] Bind on %s %s ... ", szIPSelf, d->description);
         return fp;
        }
       }
       i ++;
      }
        }
        if (i==0)
        {
            printf(" No interfaces found! Make sure WinPcap is installed. ");
            return FALSE;
        }
        /* We don't need any more the device list. Free it */
        pcap_freealldevs(alldevs);
     return NULL;
    }
     
    使用範例__|四川地震感人故事:
    pcap_t *adhandle; // 網卡句柄
    unsigned char ucSelf[6];
    char szIPSelf[16], szIPGate[16];
    if ((adhandle = OpenAdapter(0, szIPSelf, ucSelf, szIPGate)) == NULL)
    {
     printf("[!] Open adatper error! ");
     return FALSE;
    }
    在獲取到網卡句柄並打開後--青春日记简谱,發送數據包就很容易了
    if(pcap_sendpacket(adhandle, (const unsigned char *) ucFrame,
       ucFrameLen) 0)
    {
     printf("Send Packet Error ");
     return FALSE;
    }
    ucFrame是封裝好的數據包|-365赌博靠谱吗,ucFrameLen為數據包的長度_|优选彩票网。
    下麵我們封裝一個例子2019世界杯猜球彩票,使用上述代碼發送ARP請求包-_霞飞路28,用於查詢某IP對應的MAC地址|_-小型直升机发动机。
    ARP協議格式

     
    關鍵代碼
    bool sendARPData(pcap_t *adhandle)
    {
     u_char ucFrame[ARP_LEN];
     // 設置Ethernet頭
     ETHeader eh = { 0 };
     memset(eh.dhost,0xff, 6);//ARP廣播包目的地址為ffffffffffff
     memcpy(eh.shost, ucSelf, 6);
     eh.type = htons(ETHERTYPE_ARP);//幀類型為ARP
     memcpy(ucFrame, &eh, sizeof(eh));
     
     // 設置Arp頭
     ARPHeader ah = { 0 };
     ah.hrd = htons(ARPHRD_ETHER);
     ah.eth_type = htons(ETHERTYPE_IP);
     ah.maclen = 6;//硬件地址長度
     ah.iplen = 4;//IP地址長度
     ah.opcode = htons(ARP_REQUEST);//ARP請求包類型
     memcpy(ah.smac, ucSelf, 6);
     ah.saddr = inet_addr(szIPSelf); 
     memset(ah.dmac, 0x00, 6);//ARP請求包中目的MAC地址均置0
     ah.daddr = inet_addr("192.168.0.2");   //ARP請求的目的IP地址
     
     memcpy(&ucFrame[sizeof(ETHeader)], &ah, sizeof(ah));
     
     // 發送ARP數據包
     if(pcap_sendpacket(adhandle, (const unsigned char *) ucFrame,ARP_LEN) 0)
     {
      printf("Send Packet Error ");
      return FALSE;
     }
     return TRUE; 
    }
     
    啟動wireshark進行監聽-_六一寄语,運行程序||_广东电大成绩查询平台,我們可以看到如下結果-_|纽培乐,程序發出了一個ARP廣播包-赣南日报招聘,用於查詢192.168.0.2的主機MAC|_永盛国际登录网站APP,並且目標機在收到該查詢包後-_玩具熊不要冬眠,進行了回複||润美娇,將自己的MAC地址告訴了查詢發起的機器--掌上购彩合法吗。

    0×08 如何監聽分析數據包
    在監聽數據包時||_工程招投标代理,使用的關鍵函數為pcap_loop
    函數名稱--天津洗浴:int pcap_loop(pcap_t * p,int cnt, pcap_handler callback, uchar * user);
    參數說明:
    p 是由pcap_open_live()返回的所打開的網卡的指針;
    cnt用於設置所捕獲數據包的個數;
    callback 是回調函數_|198总彩代,其原型為pcap_callback(u_char* argument,const struct pcap_pkthdr* packet_header,const u_char* packet_content)
    ;user值一般為NULL
    結合上麵的代碼|_178众发娱乐,我們在獲得並打開網卡句柄adhandle-_陈树发,使用下麵的代碼並可捕獲數據包
     
    //每次捕捉到數據包時-_诺森德草药有哪些,pcap都會自動調用這個回調函數
    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
    {
     struct tm *ltime;
     char timestr[16];
     time_t local_tv_sec;
     //將時間戳轉換成可識別的格式
     local_tv_sec = header->ts.tv_sec;
     printf("%d ", local_tv_sec);
     ltime = localtime(&local_tv_sec);
     strftime(timestr, sizeof(timestr), "%H %M %S", ltime);
     printf("%s,%.6d len:%d ", ctime(&local_tv_sec), header->ts.tv_usec, header->len);
    }
     
    pcap_loop(adhandle, 0, packet_handler, NULL);
     
    程序在每一個數據包到來時_258彩票网怎么样呢?,都會自動調用回調函數packet_handler來對數據包進行處理|__鹿喜微断食,其第三個參數便是數據包內容___三星s3mini。

     


    上圖為運行結果圖_|-金星a1000,可以看到每一個數據包的時間戳信息-夺宝传世挂机,和長度信息___抽大嘴巴。
    值得注意的是|永盛app犯法吗,原始套接字也可以完成數據包的發送和監聽工作_-电源功率计算器,但是與winpcap相比_|01彩票597849com,在監聽數據包方麵是有區別的__|悦花越有刘玉龙坐牢,由於winpcap更接近與底層__16楼影院,所以在混雜模式下|__新疆武警,凡是到達網卡的數據包不管目的地址是否為自身主機_英文空间名,winpcap均能接收到_168彩票提不出款;而原始套接字隻能接收到投送給自己的數據包-_智彩快乐电子走势图。
    0×09 總結與預告
    本章中我們簡單認識了winpcap的相關基礎知識__娱乐天地登录,學習了發送數據包和接收數據包的方法-||360彩票福彩杀号定胆,其實不難發現-|_金山区财政局,發送和接收數據包的過程都比較簡單|-天龙八部39,隻需要調用相關庫函數即可--|注册送58元彩票红包,而更多的精力在數據包的組織和拆分上__|氯丹,同時在一些場景中|金家街公园,算法的使用也較為重要|_爱维侦察 地址。在接下來的章節中_-|11086现金棋牌下载地址,我們會看到下麵的內容|-_106福利版苹果版下载:
    1.掃描存活主機
    2.Arp欺騙的實現與應用
    3.端口掃描
    4.流量監控與統計分析

延伸閱讀_|天翼3g上网卡驱动:

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯係方式
本站內容來自於互聯網,僅供用於網絡技術學習,學習中請遵循相關法律法規
财神彩票国民彩票快乐飞艇秒速牛牛天空彩票qq分分彩

免责声明: 本站资料及图片来源互联网文章,本网不承担任何由内容信息所引起的争议和法律责任。所有作品版权归原创作者所有,与本站立场无关,如用户分享不慎侵犯了您的权益,请联系我们告知,我们将做删除处理!