`
malixxx
  • 浏览: 99083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简单的嗅探

阅读更多
简单的嗅探  收藏
由于本人很菜,这个代码是改别人的.呵呵.可以在公司的局域网里搞搞坏,呵呵.
我是在ubuntu8.04下的,需要gcc编译.


#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <netdb.h>
#include <sys/file.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/signal.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/if_ether.h>


#define BUFFER_MAX 2048

int open_fd(int fd) {
    int s;
    struct ifreq ifr;
    /*接口名*/
    strcpy(ifr.ifr_name, "eth0");
    /*获取接口标志*/
    if ((s = ioctl(fd, SIOCGIFFLAGS, &ifr)) < 0) {
        close(fd);
        return (-1);
    }
    /*设置接口为混杂模式*/
    ifr.ifru_flags |= 0x100;  // 关闭  ifr.ifr_flags &= ~IFF_PROMISC;
    /*设置接口标志*/
    if ((s = ioctl(fd, SIOCSIFFLAGS, &ifr)) < 0) {
        return (-1);
    }
    printf("Setting   interface   :::   %s   :::   to   promisc\n\n", intf);
    return (fd);
}

int main(int argc, char *argv[]) {
    int sock, readnum, proto;
    char buffer[BUFFER_MAX];
    char *ethhead, *iphead, *tcphead, *udphead, *icmphead, *p;

    sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));

    while (1) {
        readnum = recvfrom(sock, buffer, 2048, 0, NULL, NULL);
        /*
         14   6(dest)+6(source)+2(type or length)
         +
         20   ip header
         +
         8   icmp,tcp or udp header
         = 42

         MAC: 00:1D:7D:45:1C:09==>00:19:5B:74:27:3B
         IP: 192.168.0.182 => 192.168.0.23
         Protocol: TCP,source port: 1637,dest port: 22

         */
        if(readnum < 42) {
            fprintf(stdout, "Incomplete header, packet corrupt\n");
            continue;
        }
        ethhead = buffer;
        p = ethhead;

        printf("--------------------------------------------------------------------\n");

        printf("MAC: %.2X:%02X:%02X:%02X:%02X:%02X==>%.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n",
                p[6]&0XFF, p[7]&0XFF, p[8]&0XFF, p[9]&0XFF, p[10]&0XFF, p[11]&0XFF,
                p[0]&0XFF, p[1]&0XFF, p[2]&0XFF,p[3]&0XFF, p[4]&0XFF, p[5]&0XFF);

        iphead = ethhead + 14;
        p = iphead + 12;

        printf("IP: %d.%d.%d.%d => %d.%d.%d.%d\n",
                p[0]&0XFF, p[1]&0XFF, p[2]&0XFF, p[3]&0XFF,
                p[4]&0XFF, p[5]&0XFF, p[6]&0XFF, p[7]&0XFF);
        proto = (iphead + 9)[0];
        p = iphead + 20;
        printf("Protocol: ");
        switch(proto) {
            case IPPROTO_ICMP:
                printf("ICMP\n");
                break;
            case IPPROTO_IGMP:
                printf("IGMP\n");
                break;
            case IPPROTO_IPIP:
                printf("IPIP\n");
                break;
            case IPPROTO_TCP :
            case IPPROTO_UDP :
                printf("%s,", proto == IPPROTO_TCP ? "TCP": "UDP");
                printf("source port: %u,",(p[0]<<8)&0XFF00 | p[1]&0XFF);
                printf("dest port: %u\n", (p[2]<<8)&0XFF00 | p[3]&0XFF);
                break;
            case IPPROTO_RAW :
                printf("RAW\n");
                break;
            default:
                printf("Unkown, please query in include/linux/in.h\n");
        }
    }
}
分享到:
评论

相关推荐

    vc实现简单嗅探器带界面

    在这个主题中,我们讨论的是一个用VC(Visual C++)实现的简单嗅探器,特别地,这个程序带有MFC(Microsoft Foundation Classes)界面,使得用户交互更为直观。 首先,让我们了解一下VC++。VC++是微软公司开发的一...

    c#写的简单嗅探器(Socket)

    标题中的"C#写的简单嗅探器(Socket)"是一个使用C#编程语言实现的网络嗅探工具,它基于Socket编程,能够帮助开发者或者初学者了解网络通信的基本原理和数据包捕获的技术。嗅探器的主要功能是监听网络接口上的数据流量...

    基于C#实现的嗅探器

    在这个案例中,我们讨论的是一个基于C#编程语言实现的简单网络嗅探器。C#是微软开发的一种面向对象的编程语言,具有丰富的库支持和强大的性能,非常适合构建这种类型的软件。 首先,我们要理解嗅探器的基本原理。...

    一个简单嗅探软件的实现

    本话题主要围绕一个简单的嗅探软件的实现进行探讨,尤其关注其C++源码实现。我们将深入理解嗅探软件的工作原理,以及如何使用C++来编写这样的程序。 首先,嗅探软件的核心功能是捕获网络接口的数据包。在Linux系统...

    简单的网络嗅探器

    网络嗅探器是一种用于监测和分析网络通信的强大工具。它能捕获并解析网络上的数据包,帮助我们理解网络流量的细节,排查网络问题,进行安全审计,甚至进行网络性能优化。下面将详细介绍网络嗅探器的工作原理、常用...

    基于MFC的嗅探器

    【标题】"基于MFC的嗅探器"是利用Microsoft Foundation Classes (MFC)库开发的一款网络数据包分析工具。MFC是微软提供的一套面向对象的C++类库,它封装了Windows API,简化了Windows应用程序的开发,特别是在GUI...

    VC++简单网络嗅探软件

    由VC++实现的简单的网络包捕抓并分析,供初学者学习

    简单网络嗅探器

    简单网络嗅探器是一种基于WinPCAP库和SNMP协议实现的工具,主要用于网络数据包的捕获、解析以及简单的网络拓扑发现。WinPCAP是Windows平台下的一个开源库,它提供了对网络数据包的低级访问能力,使得开发者能够创建...

    基于winPcap开发嗅探器(c++,带界面)

    用c++基于winPcap开发的嗅探器,用mfc做了一个简单的界面

    一个简单的FLV嗅探和下载的例子

    一个简单的FLV嗅探和下载的例子,Http分析的一些展示

    一个简易的网络嗅探器的实现

    因此,本项目旨在通过编写简单的C语言程序,并利用`libpcap`或`winpcap`库来实现基本的嗅探器功能,以供初学者学习和实验使用。 #### 技术实现概述 为了实现这个简易的嗅探器,我们选择了C语言作为主要编程语言,...

    计算机网络 课程设计 网络嗅探器

    6. 实践项目:在课程设计中,学生可以尝试编写自己的简易嗅探器,例如用Python的scapy库或C语言的libpcap库。这将锻炼编程技能,加深对网络协议的理解。 7. 数据分析:捕获到的数据包可以用于进一步的分析,如统计...

    一个简单的嗅探器含源码

    标题中的“一个简单的嗅探器含源码”指的是一个网络工具,它允许用户捕获和分析网络流量。这种工具通常被称为网络嗅探器或数据包分析器,它们可以帮助开发者、网络安全专家以及网络管理员理解网络通信的细节。嗅探器...

    嗅探的基本原理嗅探的基本原理

    以下是一个简单的嗅探程序示例: ```c #include #include #include #include #include #include #include #define INTERFACE "eth0" int Open_Raw_Socket(void); int Set_Promisc(char* interface, int ...

    TCPIP课设简单网络嗅探器的设计(Java)

    简单网络嗅探器的设计 要求:设计并实现程序,捕获网络上的相关数据包,并分析这些数据包应用的协议、网络地址、端口号、数据包长度、协议头部信息等内容。 用命令行执行,显示相关结果并将数据写入日志文件。如运行...

    简单的网络嗅探器及源码

    简单的网络嗅探器及源码,时时的抓包;简单的网络嗅探器及源码,时时的抓包

    sniffer:在Windows 10上使用Scapy和PyQt5的简单嗅探器

    嗅探器在Windows上使用Scapy和PyQt5的简单嗅探器。(可选)通过鼠标时简要介绍有效信息。 去做 入门只需下载所有文件并运行main.py 先决条件Windows 10 Python 3.6 修改的scapy3k用于多处理目的。 只需从这里直接...

    一个简单的网络嗅探程序

    《构建一个简单的网络嗅探程序》 网络嗅探是一种用于监测和分析网络数据包的技术,它可以帮助我们理解网络流量的模式、检测潜在的安全威胁或进行网络性能优化。在这个主题中,我们将探讨如何创建一个基于控制台的...

    sniffer嗅探器

    在这个项目中,我们讨论的是一个使用MFC(Microsoft Foundation Classes)框架开发的简易嗅探器程序。 **MFC**是微软提供的一套面向对象的类库,它基于C++语言,为开发者提供了构建Windows应用程序的便利。MFC包含...

    网络嗅探器设计报告

    设计一个简单的网络嗅探器,其核心功能包括: 1. **数据包捕获**:能够实时监控并记录通过网络接口的所有数据包。 2. **协议解析**:深入解析捕获的数据包,展示以太网头部、IP头部以及TCP、UDP、ARP等协议的详细...

Global site tag (gtag.js) - Google Analytics