⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 427.htm

📁 unix高级编程原吗
💻 HTM
📖 第 1 页 / 共 2 页
字号:
        printf("Src Port : %d, Dst Port : %d, Message Length : %d\n", <br>

                ntohs(uhdr->source), ntohs(uhdr->dest), ntohs(uhdr->len)); <br>

} <br>

} <br>

void leave(int signo) <br>

{ <br>

        ifr_old.ifr_flags &= ~IFF_PROMISC; <br>

        if( ioctl(sock_pak, SIOCSIFFLAGS, &ifr_old) < 0 ) <br>

        { <br>

                perror("Restore IFF_PROMISC"); <br>

                exit(-1); <br>

        } <br>

        setuid(getuid()); <br>

        exit(0); <br>

} <br>

int main(int argc, char *argv[]) <br>

{ <br>

        struct ifreq ifr; <br>

        struct sockaddr_in sa_from; <br>

        struct ethhdr *ehdr; <br>

        struct iphdr *ip_hdr; <br>

        struct arp_hdr *ahdr; <br>

        struct in_addr dst_addr, src_addr; <br>

        u_char recvbuf[32*1024]; <br>

        char str_hw1[32], str_hw2[32], str_flag[128], str_src[32], str_dst[3 <br>

2]; <br>

2]; <br>

        int n, i, sa_len; <br>

        if( (sock_pak = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) <br>

        { <br>

                perror("Socket"); <br>

                exit(-1); <br>

        } <br>

        strcpy(ifr.ifr_name, "eth0"); <br>

        if( ioctl(sock_pak, SIOCGIFFLAGS, &ifr) < 0 ) <br>

        { <br>

                perror("Ioctl SIOCGIFFLAGS"); <br>

                exit(-1); <br>

        } <br>

        ifr_old = ifr; <br>

        ifr.ifr_flags |= IFF_PROMISC; <br>

        if( ioctl(sock_pak, SIOCSIFFLAGS, &ifr) < 0 ) <br>

        { <br>

                perror("Ioctl SIOCSIFFLAGS"); <br>

                exit(-1); <br>

        } <br>

        signal(SIGINT, leave); <br>

        signal(SIGTERM, leave); <br>

        for(i=0; i<80; i++) <br>



                printf("+"); <br>

        printf("\nSnoopy's nose begins to work now!\n"); <br>

        for(i=0; i<80; i++) <br>

                printf("+"); <br>

        printf("\n\n"); <br>

        while(1) <br>

        { <br>

                sa_len = sizeof(sa_from); <br>

                bzero(&sa_from, sa_len); <br>

                if ( (n = recvfrom(sock_pak, recvbuf, sizeof(recvbuf), 0, &s <br>

a_fr <br>

om, &sa_len)) < 0) <br>

                        perror("Recvfrom"); <br>

                recvbuf[n] = 0; <br>

                ehdr = (struct ethhdr *)recvbuf; <br>

                for(i=0; i<80; i++) <br>

                        printf("*"); <br>

                if( ntohs(ehdr->h_proto) == 0x0800 ) //IP datagram <br>

                { <br>

                        printf("\nIPv4 datagram from %s to %s\n", hw_addr(eh <br>

dr-> <br>

h_source, str_hw1), <br>



                                hw_addr(ehdr->h_dest, str_hw2)); <br>

                        printf("\nIP Header Analysis:\n"); <br>

                        ip_hdr = (struct iphdr*)(recvbuf + sizeof(struct eth <br>

hdr) <br>

); <br>

                        printf("Ver : 4, HLen : %d, Type Of Service : %d, To <br>

tal <br>

Length : %d\n", <br>

                                ip_hdr->ihl, ip_hdr->tos, ntohs(ip_hdr->tot_ <br>

len) <br>

); <br>

                        printf("Id : %d, %s\n", ntohs(ip_hdr->id), ip_flag(i <br>

p_hd <br>

r->frag_off, str_flag)); <br>

                        dst_addr.s_addr = ip_hdr->daddr; <br>

                        src_addr.s_addr = ip_hdr->saddr; <br>

                        strcpy( str_src, inet_ntoa(src_addr)); <br>

                        strcpy( str_dst, inet_ntop(AF_INET, &dst_addr, str_f <br>

lag, <br>

 sizeof(str_flag))); <br>

                        printf("Src IP : %s, Dst IP : %s, Protocol : %s\n", <br>

                                str_src, str_dst, ip_proto(ip_hdr->protocol, <br>



 str <br>

_flag)); <br>

                        switch( ip_hdr->protocol ) <br>

                        { <br>

                                case 1: <br>

                                        dealICMP(recvbuf, n); <br>

                                        break; <br>

                                case 2: <br>

                                        dealIGMP(recvbuf, n); <br>

                                        break; <br>

                                case 6: <br>

                                        dealTCP(recvbuf, n); <br>

                                        break; <br>

                                case 17: <br>

                                        dealUDP(recvbuf, n); <br>

                                        break; <br>

                                default: <br>

                                        break; <br>

                        } <br>

                } <br>

                else if( ntohs(ehdr->h_proto) == 0x0806 ) //ARP datagram <br>

                { <br>



                        printf("\nARP datagram from %s to %s\n", hw_addr(ehd <br>

r->h <br>

_source, str_hw1), <br>

                                hw_addr(ehdr->h_dest, str_hw2)); <br>

                        ahdr = (struct arp_hdr*)recvbuf; <br>

                        printf("HW type : %d, Proto : %d, HW Addr Len : %d, <br>

Prot <br>

o Addr Len : %d\n", <br>

                                ntohs(ahdr->hw_type), ntohs(ahdr->proto_type <br>

), <br>

                                ahdr->hw_addr_len, ahdr->proto_addr_len); <br>

                        switch( ntohs(ahdr->op) ) <br>

                        { <br>

                                case 1: <br>

                                        printf("Operation : ARP Request\n"); <br>

  <br>

                                        break; <br>

                                case 2: <br>

                                        printf("Operation : ARP Reply\n"); <br>

                                        break; <br>

                                case 3: <br>

                                        printf("Operation : RARP Request\n") <br>



; <br>

                                        break; <br>

                                case 4: <br>

                                        printf("Operation : RARP Reply\n"); <br>

                                        break; <br>

                                default: <br>

                                        printf("Operation : %d\n", ntohs(ahd <br>

r->o <br>

p)); <br>

                                        break; <br>

                        } <br>

                        printf("Sender HW : %s, Receiver HW : %s\n", <br>

                                hw_addr(ahdr->snd_hw_addr, str_hw1), <br>

                                hw_addr(ahdr->rcv_hw_addr, str_hw2)); <br>

                        memcpy(&dst_addr, ahdr->rcv_ip_addr, IP_HLEN); <br>

                        memcpy(&src_addr, ahdr->snd_ip_addr, IP_HLEN); <br>

                        strcpy( str_src, inet_ntoa(src_addr)); <br>

                        strcpy( str_dst, inet_ntop(AF_INET, &dst_addr, str_f <br>

lag, <br>

 sizeof(str_flag))); <br>

                        printf("Sender IP : %s, Receiver IP : %s\n", str_src <br>

, st <br>

, st <br>

r_dst); <br>

                } <br>

                else <br>

                { <br>

                        printf("\n? datagram from %s to %s type %.4x\n", hw_ <br>

addr <br>

(ehdr->h_source, str_hw1), <br>

                                hw_addr(ehdr->h_dest, str_hw2), htons(ehdr-> <br>

h_pr <br>

oto)); <br>

                } <br>

                for(i=0; i<80; i++) <br>

                        printf("-"); <br>

                printf("\n\n"); <br>

        } <br>

        return 0; <br>

} <br>

  Wish your sky be sunny, <br>

   Wish your heart be happy, <br>

    Wish your body be healthy, <br>

     Wish U never be lazy. <br>

  :) :> ;) ;> :-) :-> ;-) ;-> <br>



※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 202.106.16.45] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="317.htm">上一层</a>][<a href="428.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -