精华内容
下载资源
问答
  • 利用rawsocket实现本机网络报文监控解析,支持TCP、UDP、Raw报文的解析,关键字提取。测试成功的代码。
  • rawsocket抓包侦听

    2020-10-10 17:39:38
    rawsocket抓包侦听,只有简单的基本功能,VC6工程,在Win7环境下测试OK rawsocket抓包侦听,只有简单的基本功能,VC6工程,在Win7环境下测试OK
  • 主要介绍了python 使用raw socket进行TCP SYN扫描实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 通过rawsocket实行报文侦听拦截,分析报文内容特征,获取关键信息。可以作为实现嗅探软件的基础框架。
  • 本文章将介绍如何使用RawSocket(原始套接字)开发网络嗅探器: 首先我们得了解什么是套接字,这个我就不多说,自己百度,百度百科比我说的好。 那么什么又是原始套接字呢,常用的套接字分为 SOCK_STREAM(流套接字) ...
  • 使用 RawSocket 捕获网卡/指定程序/指定端口/指定IP 数据包
  • 如何自己封装IP头用raw socket来实现ip报文的发送
  • linux下使用RAW SOCKET接收LLDP报文并解析,纯C代码,可使用GCC直接编译,测试通过。
  • raw socket

    2015-01-14 11:10:01
    raw socket exmaples, 包括各种协议,源代码来自github
  • 基于raw socket的UDP数据的发送和接收,自定义IP头,UDP头,数据
  • 原始套接字 原始套接字数据包接收和发送工具,包括 ip/udp/tcp 校验和生成。
  • raw socket demo

    2016-06-03 13:30:35
    raw socket demo,原始套接字
  • 在Windows下实现基于Raw Socket的无连接通信,并且采用多线程方式。
  • 1. Raw Socket基础提供了一种方法来绕过整个网络堆栈遍历和直接将以太网帧输送到一个应用程序。有很多种方法来创建raw sockets,例如AF_PACKET,PF_PACKET。这里使用PF_PACKET,它是linux系统上才有的选项,如果是...

    1. Raw Socket基础

    提供了一种方法来绕过整个网络堆栈遍历和直接将以太网帧输送到一个应用程序。

    有很多种方法来创建raw sockets,例如AF_PACKET,PF_PACKET。这里使用PF_PACKET,它是linux系统上才有的选项,如果是windows或者是mac的系统的话,可以使用AF_PACKET。

    1.1 PF_SOCKET

    在链路层接收和发送包得应用接口。

    所有接收到的包都包含完整的头部和数据部分。

    所有发送的包都会由内核无更改的传递到媒介中。

    2. 创建Raw Socket

    2.1 理解Packet Header

    下图为以太网帧头部和IP头部格式示意图:

    以太网帧的头部有14字节,前6字节为目的mac地址,后6字节为源mac地址,之后2字节为内部协议的类型,比如IP协议的类型为0x0800。关于各种协议的类型可在/usr/include/linux/if_ether.h文件中查看(linux系统)。往里一层是IP等网络层协议,IP层内部包含TCP、UDP等传输层协议,再往里就是应用层协议,如HTTP、ssh等。

    图中最下侧是IP的头部格式,最重要的部分是前20字节。

    2.2 提取二进制数据到变量中

    使用struct模块中的unpack()函数。

    返回的时tuple格式。(tuple的更详细内容可参考:廖雪峰讲的python中tuple部分)

    第一个字符标明字节序。

    网络字节序通常是大端。

    举个例子, 终端下输入python,然后进行一下操作:[1. 帧注入  对于以太网帧和Raw Socket的介绍可参考之前的一篇博文利用Raw Socket进行以太网帧嗅探。帧注入的特点:   可以将原数据格式的包注入到网络中。在模拟网络

    >>> import struct

    >>>

    >>>

    >>> struct.pack(“B”,1)

    ‘\x01’

    >>> struct.pack(“H”,1)

    ‘\x01\x00’

    >>> struct.pack(“>H”,1)

    ‘\x00\x01’

    >>> struct.pack(“!H”,1)

    ‘\x00\x01’

    >>> struct.pack(“!L”,1)

    ‘\x00\x00\x00\x01’

    >>> exit()

    2.3 raw Socket嗅探

    主要思路:

    使用Socket模块。

    读取接收到的包。

    解释和分析包。

    也可以发送应答

    linux下打开终端,进入python环境(raw_socket需要root权限,输入命令是要以sudo python命令进入。),依次按一下方式操作:

    jeanphorn@ubuntu:~/workspace/python$ sudo python

    [sudo] password for jeanphorn:

    Python 2.7.3 (default, Apr 20 2012, 22:44:07)

    [GCC 4.6.3] on linux2

    Type “help”, “copyright”, “credits” or “license” for more information.

    >>>

    >>>

    >>>

    >>> import socket

    >>> import struct

    >>> import binascii

    >>>

    >>>

    >>> rawSocket = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800))

    >>>

    >>> pkt = rawSocket.recvfrom(2048)

    >>> pkt

    (“\x08\x00’5BY@l\x8f.\xd5\xc4\x08\x00E\x10\x004W\x06@\x00@\x06_\xf0\xc0\xa8\x01_\xc0\xa8\x01\x0e\xf0u\x00\x16\xa9^i\x03\xe3\xa0V\xb4\x80\x10\x0f\xfeGr\x00\x00\x01\x01\x08\n\x1e\xd3\x0f\xc7\x00\x00/\xb2”, (‘eth0’, 2048, 0, 1, ‘@l\x8f.\xd5\xc4’))

    >>> ethernetHeader = pkt[0][0:14]

    >>>ethernetHeader

    “\x08\x00’5BY@l\x8f.\xd5\xc4\x08\x00”

    >>> eth_hdr = struct.unpack(“!6s6s2s”,ethernetHeader)

    >>> eth_hdr = struct.unpack(“!6s6s2s”,ethernetHeader)

    >>> eth_hdr

    (“\x08\x00’5BY”, ‘@l\x8f.\xd5\xc4’, ‘\x08\x00’)

    >>> binascii.hexlify(eth_hdr[0])

    ‘080027354259’

    >>> binascii.hexlify(eth_hdr[1])

    ‘406c8f2ed5c4’

    >>> binascii.hexlify(eth_hdr[2])

    ‘0800’

    >>> ipHeader = pkt[0][14:34]

    >>> pkt

    (“\x08\x00’5BY@l\x8f.\xd5\xc4\x08\x00E\x10\x004W\x06@\x00@\x06_\xf0\xc0\xa8\x01_\xc0\xa8\x01\x0e\xf0u\x00\x16\xa9^i\x03\xe3\xa0V\xb4\x80\x10\x0f\xfeGr\x00\x00\x01\x01\x08\n\x1e\xd3\x0f\xc7\x00\x00/\xb2”, (‘eth0’, 2048, 0, 1, ‘@l\x8f.\xd5\xc4’))

    >>> ip_hdr = struct.unpack(“!12s4s4s”,ipHeader)

    >>> ip_hdr

    (‘E\x10\x004W\x06@\x00@\x06_\xf0’, ‘\xc0\xa8\x01_’, ‘\xc0\xa8\x01\x0e’)

    >>> socket.inet_ntoa(ip_hdr[1])

    ‘192.168.1.95’

    >>> socket.inet_ntoa(ip_hdr[2])

    ‘192.168.1.14’

    >>> tcpHeader = pkt[0][34:54]

    >>> tcp_hdr = struct.unpack(“!HH16s”,tcpHeader)

    >>> tcp_hdr

    (61557, 22, ‘\xa9^i\x03\xe3\xa0V\xb4\x80\x10\x0f\xfeGr\x00\x00’)

    3. 完整的python代码

    将以上代码写在一个packetSniffer.py的文件中,运行时要加上sudo ./packetSniffer.py。

    #!/usr/bin/env python

    # _*_ coding=utf-8 _*_

    import socket

    import struct

    import binascii

    rawSocket = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800))

    pkt = rawSocket.recvfrom(2048)

    ethernetHeader = pkt[0][0:14] #提取以太网帧头

    eth_hdr = struct.unpack("!6s6s2s",ethernetHeader) #6字节目的mac地址,6字节源mac地址,2字节协议类型

    binascii.hexlify(eth_hdr[0])

    binascii.hexlify(eth_hdr[1])

    binascii.hexlify(eth_hdr[2])

    ipHeader = pkt[0][14:34] #提取IP协议头,不包含option和padding字段。

    ip_hdr = struct.unpack("!12s4s4s",ipHeader) # !标示转换网络字节序,前12字节为版本、头部长度、服务类型、总长度、标志等其他选项,后面的两个四字节依次为源IP地址和目的IP地址。

    print "source IP address: " + soket.inet_ntoa(ip_hdr[1])

    print "destination IP address: " + soket.inet_ntoa(ip_hdr[2])

    tcpHeader = pkt[0][34:54]

    tcp_hdr = struct.unpack("!HH16s",tcpHeader)

    print tcp_hdr[本文介绍使用PF_PACKET和SOCK_RAW发送自定义type以太网数据包,使用wireshare抓包可以获取到数据包,为Linux内核增加网络协议做铺垫。先上码:#include #include #include

    展开全文
  • RAW socket 收发包

    2021-05-18 01:49:49
    if ((sock = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL))) ) { fprintf (stdout, "create socket error\n"); return -1; } memset (&sll, 0, sizeof (sll)); sll.sll_family = PF_PACKET; sll.sll_protocol =...

    #include #define BUFFER_MAX 2048

    int main (int argc, char *argv[])

    {

    int sock, n_read, n_write;

    char buffer[BUFFER_MAX];

    int fd;

    struct sockaddr_ll sll;

    struct ifreq ifstruct;

    printf ("Date:%s || Time:%s \n", __DATE__, __TIME__);

    fd = open("/var/buffer", O_RDWR|O_CREAT);

    if ((sock = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL))) < 0)

    {

    fprintf (stdout, "create socket error\n");

    return -1;

    }

    memset (&sll, 0, sizeof (sll));

    sll.sll_family = PF_PACKET;

    sll.sll_protocol = htons (ETH_P_ALL);

    strcpy (ifstruct.ifr_name, "eth1");

    ioctl (sock, SIOCGIFINDEX, &ifstruct);

    sll.sll_ifindex = ifstruct.ifr_ifindex;

    strcpy (ifstruct.ifr_name, "eth1");

    ioctl (sock, SIOCGIFHWADDR, &ifstruct);

    memcpy (sll.sll_addr, ifstruct.ifr_ifru.ifru_hwaddr.sa_data, ETH_ALEN);

    sll.sll_halen = ETH_ALEN;

    if (bind (sock, (struct sockaddr *) &sll, sizeof (sll)) == -1)

    {

    printf ("bind:   ERROR\n");

    return -1;

    }

    while (1)

    {

    n_read = recvfrom (sock, buffer, 2048, 0, NULL, NULL);

    if (n_read <= 0)

    {

    perror("recvfrom\n");

    return -1;

    }

    n_write = write(fd,buffer, n_read);

    if(n_write != n_read)

    {

    perror("write\n");

    return -1;

    }

    }

    return 0;

    }

    int main (int argc, char *argv[])

    {

    int sock;

    int n_write;

    int n_res;

    struct sockaddr_ll sll;

    struct ifreq ifstruct;

    char buffer[1024];

    char MAC_BUFFER[ETH_ALEN]= {0x01,0x02,0x03,0x04,0x05,0x06};

    char TYPE_BUFFER[2] = {0x88,0x66};

    printf ("Date:%s || Time:%s \n", __DATE__, __TIME__);

    if ((sock = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL))) < 0)

    {

    fprintf (stdout, "create socket error\n");

    return -1;

    }

    n_res = 0;

    n_write = 0;

    memset (&sll, 0, sizeof (sll));

    sll.sll_family = PF_PACKET;

    sll.sll_protocol = htons (ETH_P_ALL);

    strcpy (ifstruct.ifr_name, "eth1");

    ioctl (sock, SIOCGIFINDEX, &ifstruct);

    sll.sll_ifindex = ifstruct.ifr_ifindex;

    strcpy (ifstruct.ifr_name, "eth1");

    ioctl (sock, SIOCGIFHWADDR, &ifstruct);

    memcpy (sll.sll_addr, ifstruct.ifr_ifru.ifru_hwaddr.sa_data, ETH_ALEN);

    sll.sll_halen = ETH_ALEN;

    if (bind (sock, (struct sockaddr *) &sll, sizeof (sll)) == -1)

    {

    printf ("bind:   ERROR\n");

    return -1;

    }

    memset(&ifstruct, 0, sizeof(ifstruct));

    strcpy (ifstruct.ifr_name, "eth1");

    if (ioctl (sock, SIOCGIFFLAGS, &ifstruct) == -1)

    {

    perror ("iotcl()\n");

    printf ("Fun:%s Line:%d\n", __func__, __LINE__);

    return -1;

    }

    ifstruct.ifr_flags |= IFF_PROMISC;

    if(ioctl(sock, SIOCSIFFLAGS, &ifstruct) == -1)

    {

    perror("iotcl()\n");

    printf ("Fun:%s Line:%d\n", __func__, __LINE__);

    return -1;

    }

    memcpy(buffer,MAC_BUFFER,ETH_ALEN);

    memcpy(buffer+6,sll.sll_addr,ETH_ALEN);

    memcpy(buffer+12,TYPE_BUFFER,2);

    while (1)

    {

    n_res = sendto ( sock, buffer, 1024, 0,

    (struct sockaddr *) &sll, sizeof (sll));

    if (n_res < 0)

    {

    perror("sendto()\n");

    return -1;

    }

    n_write += n_res;

    if (n_write >= 2048 * 2560)

    {

    break;

    }

    }

    return 0;

    }

    展开全文
  • I have some existing C code that uses ICMP raw sockets to do Ping and I need to use this code in Java as Java does not support ICMP packages. When I wrap the code in JNI and call it, the C code fails ...

    I have some existing C code that uses ICMP raw sockets to do Ping and I need to use this code in Java as Java does not support ICMP packages. When I wrap the code in JNI and call it, the C code fails to obtain the socket when doing:

    socket(AF_INET, SOCK_RAW, 1);

    I guess that Java has dropped some privileges that disables the use of raw socket from the Java process. This I must find a solution to.

    I have observed the following:

    If I write a C program and call that from Java using Runtime the forked code may open the socket.

    If I run this native code from Eclipse it also runs nicely. I guess this comes from the fact that Eclipse has been started from eclipse.exe, and not from java.exe.

    This means that I could solve my problem by choosing one of these two strategies, but I like neither. Are there any other ways that I could get Java to accept that the JNI code is opening this socket?

    Edit:

    The more I look into this problem I figure that it must be a windows 7 related issue with how Java is being started.

    It also appears that if you get windows to behave or if you are on some other platform than Windows the method InetAddress.isReachable() could be used as well.

    解决方案

    Maybe use an existing Java native socket lib? Then you don't have to worry about coding the JNI lib.

    展开全文
  • 使用原始套接字来对接收的IP数据包进行分析
  • RAW SOCKET探索

    2020-07-27 18:00:11
    在Linux实现抓取以太网络上的数据包主要有libpcap,raw socket以及从内核中获取的方式。 我尝试选择使用raw socket来抓取以太网络上的数据包。 一、socket地址域(协议簇) 在Linux的manual中,有两个篇包含socket...

    在Linux实现抓取以太网络上的数据包主要有libpcap,raw socket以及从内核中获取的方式。

    我尝试选择使用raw socket来抓取以太网络上的数据包。

    一、socket地址域(协议簇)

    在Linux的manual中,有两个篇包含socket相关的说明,分别是socket(2)和socket(7),这两篇中的socket定义不完全相同:

    socket(2): int socket(int domain, int type, int protocol);

    socket(7): mysocket = socket(int socket_family, int socket_type, int protocol);

    主要的区别在第一个参数,一个是域(domain),其参数的定义皆为AF_XXX;一个是簇(family),其参数定义皆为PF_XXX。AF与PF的区别一个是地址域,一个是协议簇,从定义上来说这两者是有细微区别,但是从Linux中的定义可以看到这两者是基本上无需区分的(sys/socket.h)。

    在较新的socket(2)手册中对域的解释是通信域,在此理解为socket所使用的通信协议吧。

    在以太网络的socket通信中,使用了两类协议,AF_INET和AF_PACKET。

    1. AF_INET指代IPv4协议,使用该协议的socket与内核进行网络层的通信,将网络层的数据包发往内核,可以由用户决定IP首部由用户还是socket进行创建。
    2. AF_PACKET指代(Low level packet interface),这是socket(7)中关于AF_PACKET解释的原话,在以太网中自然指代的是以太链路层。

    可以理解为使用AF_INET即是对IP层以上的数据进行处理,使用AF_PACKET即是对链路层以上的数据进行处理。

    socket的第二个参数是socket_type,其表示在socket所要处理的通信域上使用何种协议进行通信。例如,使用TCP或UDP协议通信即是在AF_INET域上使用SOCK_STREAM或SOCK_DGRAM进行流式或报文式的通信。SOCK_RAW即是与这些通信方式平等的一种,但是操作系统并不帮助用户对数据报进行管理,用户需要自主组建上层或当前层网络协议首部,这就给了用户发送报文更大的自由。

    socket的第三个参数在定义里为protocol(协议),在创建TCP或UDP通信socket的过程中,通常将该参数置为0,其含义表示由socket自己选择合适的协议。实际上当使用SOCK_STREAM时socket自动选择了IPPRPTO_TCP,使用SOCK_DGRAM时选择了IPPROTO_UDP。由IPPROTO_XXX可以看出,实际上这是表示IP以上所使用的协议是什么的协议标识,当编写链路层的SOCK_RAW套接字是,我们也需要选择所使用的网络协议标识是ETH_P_IP、ETH_P_ARP、ETH_P_ALL或是其他,前三者即分别表示链路层以上使用IP、ARP或者是全部协议都可以。

    • AF_INET域的SOCK_RAW在 RAW(7) 和 IP(7) 中有较为详细的描述
    • AF_PACKET域的SOCK_RAW在 PACKET(7) 中有较为详细的描述

    创建网络层和以太网层的原始套接字语句即为:

    socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
    

    socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
    

    AF_INET域SOCK_RAW的默认协议当为IPPROTO_RAW,该socket类型仅用于发送数据包(是否包含IP首部在本文后续进行说明),若需要接收网络层的IP数据包,则考虑使用AF_PACKET域的SOCK_RAW,并将socket的协议设定为ETH_P_IP(参见RAW(7))。

    在使用AF_PACKET域的SOCK_RAW进行以太网嗅探时,ETH_P_ALL可替换为ETH_P_IP或其他定义在<if_ether.h>中的网络协议标识来获取特定协议的以太网数据包。

    二、设置socket——setsockopt

    可以使用 setsockopt 来对许多的socket选项进行设置,同时可以使用 getsockopt 来获取这些选项的值。 setsockopt的定义为:

    setsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)
    

    setsockopt的第二个参数为level,这里我就理解为层,例如SOL_SOCKET表示设置socket层面的选项,而IPPROTO_IP表示设置IP层面的选项。第三个和第四个选项是设置的参数值以及值的长度。

    对AF_INET域的SOCK_RAW需要的使用setsockopt进行的设置可能有:

    setsockopt(socket_id, IPPROTO_IP, IP_HDRINCL, &flag, sizeof(flag));
    

    该语句由用户定义IP首部,并认为发送的报文是从IP首部开始的。 (在上个语句中,flag=1,注意flag在这里需要是int型/四字节,设置/获取的选项不同,后两个参数也不同,详细参考 setsockopt |如果不设置IP_HDRINCL,则发送的报文内核认为是从IP首部之后开始的,内核会依据源和目的地址添加IP首部后再进行发送)

    setsockopt(socket_id, SOL_SOCKET, SO_BROADCAST, &flag, sizeof(flag));
    

    该语句设置socket可以发送广播报文,否则进行send/sendto时会回复目的地址错误。

    setsockopt(iSockId, SOL_SOCKET, SO_BINDTODEVICE, device, IFNAMSIZ);
    

    该语句设置socket所绑定的接口,如果不对特定的接口进行绑定,Linux内核会将所有抓取到的符合socket对应协议的数据包都发送给该socket(参见RAW(7))。使用该语句进行绑定是将socket与特定的接口进行绑定,而是用bind则是将socket与特定的网络地址进行绑定(猜想,如果一块网卡上有多个IP地址,那么使用setsockopt的SO_BINDTODEVICE进行绑定则会获取到该网卡上所有IP地址接收的数据包?)。

    对于AF_PACKET域的SOCK_RAW无法使用setsockopt的SO_BINDTODEVICE进行网络接口的绑定。在SOCKET(7)中特别申明,该方法仅对某些类型的socket生效,AF_INET域的socket是其中之一,而AF_PACKET域不生效,可以使用bind进行接口绑定。

    三、设置网络接口及获取其信息

    在我使用AF_PACKET域socket的过程中,使用了ioctl来对网络接口进行信息获取及设置。

    首先使用ioctl获取接口的index信息,以便AF_PACKET域的socket能够与网络接口进行绑定:

    struct ifreq ifr_re;    // ifreq结构用于获取接口信息
    strncpy(ifr_re.ifr_name, device, IFNAMSIZ);
    // 获取指定网卡接口的INDEX
    if(ioctl(iSockId, SIOCGIFINDEX, (char*)&ifr_re))
    {
        return -1;
    }
    struct sockaddr_ll RawHWAddr;
    memset(&RawHWAddr, 0, sizeof(RawHWAddr));
    RawHWAddr.sll_ifindex   = ifr_re.ifr_ifindex;
    RawHWAddr.sll_family    = AF_PACKET;
    RawHWAddr.sll_protocol  = htons(ETH_P_ALL);
    RawHWAddr.sll_hatype    = 0;
    RawHWAddr.sll_pkttype   = PACKET_HOST;
    RawHWAddr.sll_halen     = ETH_ALEN;
    // 需要使用struct sockaddr_ll 结构绑定RawSocket与硬件地址
    // 在 packet(7) 的man手册中有说明, For bind only sll_protocol and sll_ifindex are used
    if(bind(iSockId, (struct sockaddr*)&RawHWAddr, sizeof(RawHWAddr)))
    {
        return -1;
    }
    

    再次使用ioctl对网络接口进行设置开启混杂模式,使得AF_PACKET域的socket能够不仅仅抓取到目的地址为与之绑定的网络接口的数据包,而能够获取到网卡加入的链路上的所有数据包:

    struct ifreq ifr_re;    // ifreq结构用于获取接口信息
    strncpy(ifr_re.ifr_name, device, IFNAMSIZ);
    if(ioctl(iSockId, SIOCGIFFLAGS, (char*)&ifr_re))
    {
        return -1;
    }
    ifr_re.ifr_flags |= IFF_PROMISC;
    if(ioctl(iSockId, SIOCSIFFLAGS, (char*)&ifr_re))
    {
        return -1;
    }
    

    将AF_PACKET域的socket与接口绑定并开启混杂模式后,就能够在特定接口上抓取以太网数据包了。

    原文链接:https://my.oschina.net/ureyishere/blog/628844

    展开全文
  • raw socket编程

    2019-12-31 16:53:31
    原始套接字应用也很广泛,可以实现sniffer【之前使用pcap实现的sniffer也可以使用raw_socket实现】、IP 欺骗等,基于此,可以实现各种攻击。原始套接字之所以能够做到这一点,是因为它可以绕过系统内核的协议栈,...
  • /** send a raw ethernet frame*/#include //memcpy()#include //strxxx()#include //close()#include //socket()#include //htons()#include //struct ...
  • } sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP); if (sock == -1) { perror("socket() failed"); return 1; }else{ printf("socket() ok\n"); } if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))...
  • 但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net一般情况下,我们使用raw socket都是用于发送...最近我想用raw socket自己去...
  • raw socket编程例子

    2010-04-12 19:17:12
    raw socket编程例子 source
  • Android设备被搜索之RawSocket背景,初衷Raw Socket编译环境RawSocket.c重点代码描述建立raw socket服务接收socket数据发送socket数据获取本机的IP、MAC设置开机自启动 背景,初衷 1.需要完成一个设备搜索功能,及...
  • 1. 帧注入对于以太网帧和Raw Socket的介绍可参考之前的一篇博文利用Raw Socket进行以太网帧嗅探。帧注入的特点:可以将原数据格式的包注入到网络中。在模拟网络应答方面很强大。原始套接字包结构具有不可延展性。...
  • rawsocket抓包工具源码

    2014-08-25 19:12:48
    利用rawsocket、winpcap两种技术实现的监控http数据的C#源码,网上上搜集,代码有点凌乱,适合配上《tcp/ip详解》这本书研究用。
  • python raw socket 介绍

    2018-08-16 15:15:00
    因为要使用 python 底层发包模块,也就是 raw socket 发包模式,所以在此深入了解一下 python socket 通信。 涉及到的函数: import socket socket() setsockopt() sendto() recvfrom() 因为使用的是原始套接字,...
  • rawsocket 使用小结

    千次阅读 2017-05-24 20:42:46
    经过一学期网络课的学(zi)习,对Linux平台下使用rawsocket编程有一定的了解。下面我将结合实验写过的wireshark、ping、router和vpn程序使用socket的实例给大家分享我的经验。
  • 用C++实现的数据包捕获程序,截获数据包,并对数据包进行分析。还有写入日志的功能。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,615
精华内容 22,646
关键字:

rawsocket