新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 在Linux下利用C語言來實現一個Sniffer的方法簡介

        在Linux下利用C語言來實現一個Sniffer的方法簡介

        作者: 時間:2012-05-16 來源:網絡 收藏

         if (n42) {

        本文引用地址:http://www.104case.com/article/149038.htm

          perror(recvfrom():);

          printf(Incomplete packet (errno is %d)n,

          errno);

          close(sock);

          exit(0);

          }

          ethhead = buffer;

          printf(Source MAC address:

          %02x:%02x:%02x:%02x:%02x:%02xn,

          ethhead[0],ethhead[1],ethhead[2],

          ethhead[3],ethhead[4],ethhead[5]);

          printf(Destination MAC address:

          %02x:%02x:%02x:%02x:%02x:%02xn,

          ethhead[6],ethhead[7],ethhead[8],

          ethhead[9],ethhead[10],ethhead[11]);

          iphead = buffer+14; /* Skip Ethernet header */

          if (*iphead==0x45) { /* Double check for IPv4

          * and no options present */

          printf(Source host %d.%d.%d.%dn,

          iphead[12],iphead[13],

          iphead[14],iphead[15]);

          printf(Dest host %d.%d.%d.%dn,

          iphead[16],iphead[17],

          iphead[18],iphead[19]);

          printf(Source,Dest ports %d,%dn,

          (iphead[20]8)+iphead[21],

          (iphead[22]8)+iphead[23]);

          printf(Layer-4 protocol %dn,iphead[9]);

          }

          }

          }

          PF_PACKET協議簇可以讓應用程序把數據包變成似乎從網絡層接收的樣子,但是沒有辦法抓到那些不是發向自己主機的包。正如我們前面看到的,網卡丟棄所有不含有主機MAC地址的數據包,這是因為網卡處于非混雜模式,即每個網卡只處理源地址是它自己的幀!

          只有三個例外:如果幀的目的MAC地址是受限的廣播地址(255.255.255.255)那么它將被所有的網卡接收:如果一個幀的目的地址是組播地址,那么它將被那些打開組播接收功能的網卡所接收;網卡如被設置成混雜模式,那么它將接收所有流經它的數據包最后一種情況當然是我們最感興趣的了,把網卡設置成混雜模式,我們只需要發出一個特殊的ioctl()調用在那個網卡上打開一個socket,因為這是一個具有危險性的操作,所以這個調用只有具有root權限的用戶才可完成,假設那個“sock”包含一個已經打開的socket。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 金秀| 西宁市| 论坛| 逊克县| 大港区| 汝南县| 隆回县| 合山市| 哈密市| 武邑县| 五莲县| 龙川县| 汉川市| 开平市| 尼木县| 大足县| 宜君县| 资源县| 安丘市| 襄汾县| 孟村| 晋宁县| 龙泉市| 海原县| 株洲县| 张家港市| 陆川县| 鹿泉市| 湖南省| 巴南区| 湖口县| 稷山县| 清涧县| 荥阳市| 大邑县| 社会| 保德县| 苏州市| 嫩江县| 临泉县| 慈利县|