精华内容
下载资源
问答
  • AF_PACKET

    千次阅读 2015-08-07 16:50:08
    socket的几种里面常见的2种。 ------历史------- AF_NET最早生出,后来有了AF_PACKET。...AF_PACKET=PF_PACKET, 使用在kernel中 net/af_packet.c http://lxr.free-electrons.com/source/net/packet/af_p

    socket的几种里面常见的2种。

    ------历史-------

    AF_NET最早生出,后来有了AF_PACKET。

    ----结束历史-------

    AF_NET常见。

    AF_PACKET=PF_PACKET, 使用在kernel中 net/af_packet.c


    http://lxr.free-electrons.com/source/net/packet/af_packet.c


    PF_PACKET有3种类型,是SOCK_RAW和SOCK_DGRAM, SOCK_PACKET

    SOCK_RAW 带MAC报文头(TCP/IP栈中,14个字节=目的MAC+源MAC+类型(0x0806,IP))

    SOCK_DGRAM不带二层头


    在上面的连接中,针对SOCK_DGRAM的socket,底层处理就是加上包头再发送

    static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)

      if (sock->type == SOCK_DGRAM) {
                offset = dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len);

    对于SOCK_DGRAM的socket, 底层处理就是对收到的包剥掉包头再叫上层处理

    static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,

    if (sk->sk_type == SOCK_DGRAM) {
            macoff = netoff = TPACKET_ALIGN(po->tp_hdrlen) + 16 +


    展开全文
  • PF_PACKETAF_PACKET

    2020-07-27 18:03:33
    首先查看一下源代码 shell#>vim /usr/include/bits/socket.h ...line115 #define AF_PACKET PF_PACKET 看来数值上是相等的,都是 0x0011。不同之处是,一个代表协议族,一个代表地址族。 原文链接:

    首先查看一下源代码
    shell#>vim /usr/include/bits/socket.h

    line 62 /* Protocol families. /
    line 83 #define PF_PACKET 17 /
    Packet family. */

    line 94 /* Address families. */
    line115 #define AF_PACKET PF_PACKET

    看来数值上是相等的,都是 0x0011。不同之处是,一个代表协议族,一个代表地址族。

    原文链接:https://blog.csdn.net/Zuocheng_Liu/article/details/7382125

    展开全文
  • PF_PACKETAF_PACKET的不同

    千次阅读 2012-03-22 10:35:00
    首先查看一下源代码 shell#>vim /usr/include/bits/socket.h line 62 /* Protocol families.... line 83 #define PF_PACKET 17 /* Packet family....line 94 /* Address families....line115 #define AF_PACKET P...

    首先查看一下源代码
    shell#>vim /usr/include/bits/socket.h


    line 62 /* Protocol families. */
    line 83 #define PF_PACKET 17 /* Packet family. */


    line 94 /* Address families. */
    line115 #define AF_PACKET PF_PACKET

    看来数值上是相等的,都是 0x0011。不同之处是,一个代表协议族,一个代表地址族。

    展开全文
  • 【LWIP】AF_PACKET套接字分析

    千次阅读 2017-08-31 20:25:15
    其实,还有一种套接字比它更厉害,可以构建自定义以太网包–AF_PACKET套接字在SylixOS中, 使用socket(AF_PACKET, SOCK_RAW, ETHTYPE_*)创建的套接字可以接收链路层报文。 那为什么AF_PACKET

    收录于:

    【LWIP】LWIP协议|相关知识汇总|LWIP学习笔记


    之前我们学习了原始套接字(SOCK_RAW),通过原始套接字可以越过传输层,直接在IP层进行数据的发送和接收。
    通过原始套接字,可以构建自定义的IP包。

    其实,还有一种套接字比它更厉害,可以构建自定义以太网包–AF_PACKET套接字


    使用socket(AF_PACKET, SOCK_RAW, ETHTYPE_*)创建的套接字可以接收链路层报文。
    那为什么
    AF_PACKET
    协议域的套接字可以接收链路层报文呢?


    今日追踪了一下:
    1.首先在socket函数中,对不同的协议域设置了不同入口。
    本文进入的是packet_socket函数。

        /* 选择协议域 */
        switch (domain) {
        case AF_UNIX:     /*  UNIX 域协议                 */
            pafunix = unix_socket(domain, type, protocol);
            ...
        case AF_PACKET:   /*  PACKET                      */
            pafpacket = packet_socket(domain, type, protocol);
            ...
        case AF_INET:
        case AF_INET6:    /*  IPv4 / v6                   */
            iLwipFd = lwip_socket(domain, type, protocol);
            ...
        default:
        }
    

    在packet_socket->__packetCreate函数中,创建AF_PACKET控制块,并加入AF_PACKET链表。

    static AF_PACKET_T  *__packetCreate (INT  iType, INT  iProtocol)
    {
        AF_PACKET_T *pafpacket;
        
        pafpacket = (AF_PACKET_T *)__SHEAP_ALLOC(sizeof(AF_PACKET_T));
        ...
        pafpacket->PACKET_iType         = iType;
        pafpacket->PACKET_iProtocol     = iProtocol;
        ...
        /* 将AF_PACKET控制块加入全局链表 */
        _List_Line_Add_Ahead(&pafpacket->PACKET_lineManage, &_G_plineAfPacket);
        ...
        return  (pafpacket);
    }
    

    2.通过recvfrom函数接收数据。
    选择AF_PACKET协议域,进入packet_recvfrom函数。

    ssize_t  recvfrom (int s, void *mem, size_t len, int flags,
                       struct sockaddr *from, socklen_t *fromlen)
    {
    	...
        switch (psock->SOCK_iFamily) {
        case AF_UNIX:   /*  UNIX 域协议                 */
            sstRet = (ssize_t)unix_recvfrom(psock->SOCK_pafunix, mem, len, flags, from, fromlen);
            break;
        case AF_PACKET: /*  PACKET                      */
            sstRet = (ssize_t)packet_recvfrom(psock->SOCK_pafpacket, mem, len, flags, from, fromlen);
            break;
        default:
            sstRet = (ssize_t)lwip_recvfrom(psock->SOCK_iLwipFd, mem, len, flags, from, fromlen);
            break;
        }
        ...
    }
    

    在packet_recvfrom 函数中判断AF_PACKET控制块是否获取到数据,并读取。

    ssize_t  packet_recvfrom (AF_PACKET_T *pafpacket, void *mem, size_t len, int flags,
                              struct sockaddr *from, socklen_t *fromlen)
    {
    ...
            /* 当前节点是否有数据 */
            if (__packetCanRead(pafpacket, flags, len)) {
                /* 接收一个数据包 */
                sstTotal = __packetBufRecv(pafpacket, mem, len, 
                                           (struct sockaddr_ll *)from, flags);
            }
    ...
    }
    

    3.获取到数据的源头在tcpip.c文件中,tcpip_input函数是LWIP协议栈的入口,在tcpip_input函数中添加了一个回调函数,用于AF_PACKET获取链路层报文。

    tcpip_input(struct pbuf *p, struct netif *inp)
    {
    #if defined(SYLIXOS) && defined(LWIP_HOOK_LINK_INPUT)
      /* SylixOS 添加的回调函数(AF_PACKET获取链路层报文) */
      if (LWIP_HOOK_LINK_INPUT(p, inp)) {
        pbuf_free(p);
        return ERR_OK;
      }
    ...
    }
    

    4.通过sendto函数发送数据。
    和之前一样,选择AF_PACKET协议域,进入packet_sendto函数。
    在packet_sendto->__packetEthRawSendto函数中,组装一个以太网报文,并通过netif->linkoutput函数将数据通过网卡驱动发送出去。

    errno_t  __packetEthRawSendto (CPVOID                pvPacket, 
                                   size_t                stBytes, 
                                   struct sockaddr_ll   *psockaddrll)
    {
    ...
        /* 获取网络接口 */
        pnetif = (struct netif *)netif_get_by_index((UINT)psockaddrll->sll_ifindex);
    ...
        /* 分配带有 PAD 的以太网报头 pbuf */
        pbuf_hdr = pbuf_alloc(PBUF_RAW, ETH_HLEN + ETH_PAD_SIZE, PBUF_RAM); 
    ...
        /* 拷贝数据至pbuf */
        lib_memcpy(((u8_t *)pbuf_hdr->payload) + ETH_PAD_SIZE, pvPacket, ETH_HLEN);
    ...
        /* 通过网卡驱动发送函数,将数据发送出去 */
        err = pnetif->linkoutput(pnetif, pbuf_hdr);
    ...
    }
    

    至此,AF_PACKET套接字的创建即使用介绍完毕。
    AF_PACKET套接字工作流程图如下:
    这里写图片描述

    展开全文
  • 网络包Linux 该软件包提供的类型可以使network软件包与Linux数据包套接字一起使用。...- socket AF_PACKET Raw (toProtocolNumber ETH_P_ALL) -- Get the index of the eth0 interface, fall back to
  • 本文分析二层报文,例如:socket(AF_PACKET, SOCK_RAW, ETH_P_ALL)方式创建的socket,可以检测到所有的二层报文。raw socket实现的核心在于,socket的建立,并注册到相应的数据中,实现在收包阶段把报文提交...
  • 使用AF_PACKET抓无线数据包

    千次阅读 2012-11-29 09:20:02
    主要流程(待完善): 1、使用wlanconfig *** create wlandev wifi0 wlanmode ...2、创建AF_PACKET的socket:socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); 3、将socket绑定到创建的monitor上: struct if
  • AF_PACKET套接字解密 一

    千次阅读 2014-06-25 12:23:14
    使用socket(AF_PACKET, SOCK_RAW, ETH_P_ALL)创建的套接字到底为何于众不同,今日追踪了一下。使用Linux 3.2.5版内核 net/socket.c 点击(此处)折叠或打开 SYSCALL_DEFINE3(socket, int, family, ...
  • AF_PACKET套接字解密 二

    千次阅读 2014-06-25 12:25:40
    AF_PACKET套接字注册了prot_hook后,怎样进行监听呢,先来看发送: 当协议栈准备将数据交给net_device发送时,它将调用dev_queue_xmit(): 点击(此处)折叠或打开 int dev_queue_xmit(struct ...
  • 1、前言  linux提供了原始套接字RAW_SOCKET,可以抓取数据链路层的报文。这样可以对报文进行深入分析...第二种方法是使用packet_mmap,使用共享内存方式,在内核空间中分配一块内核缓冲区,然后用户空间程序调用mm...
  • AF_PACKET套接字解密 --- 01

    千次阅读 2013-03-13 18:24:28
    AF_PACKET套接字解密 --- 01 2012-05-23 22:08:23 分类: LINUX 使用socket(AF_PACKET, SOCK_RAW, ETH_P_ALL)创建的套接字到底为何于众不同,今日追踪了一下。使用Linux 3.2.5版内核 ...
  • AF_INET和AF_PACKET区别

    万次阅读 2013-12-16 13:15:36
    man 7 packet   Packet sockets are used to receive or send raw packets at the device driver (OSI Layer 2) level. They allow the user to implement protocol modules in user space on top
  • AF_PACKET套接字解密

    2013-07-08 09:53:04
    原文出处:http://blog.chinaunix.net/uid-22362479-id-3220107.htmlhttp://blog.chinaunix.net/uid-22362479-id-3220136.html使用socket(AF_PACKET,SOCK_RAW,ETH_P_ALL)创建的套接字到底为何于众不同,今日追踪了...
  • AF_PACKET套接字解密 --- 02 2012-05-23 22:36:57 分类: LINUX 当AF_PACKET套接字注册了prot_hook后,怎样进行监听呢,先来看发送: 当协议栈准备将数据交给net_device发送时,它将调用dev_...
  • af_packet.c

    2012-03-07 16:22:53
    在linux先安装sebek往往缺少这个内核文件,内核版本2.6.18
  • 更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)漏洞背景近日,Openwall社区上公开了一个Linux内核AF_PACKET原生套接字内存破坏漏洞。根据细节描述,该漏洞出现在...
  • 原文地址::... 相关文章 1、C语言中利用AF_PACKET 原始套接字发送一个任意以太网帧 (二)----http://blog.chinaunix.net/uid-16813896-id-5087846.html 目标  利用AF_P
  • 本文分析二层报文,例如:socket(AF_PACKET, SOCK_RAW, ETH_P_ALL)方式创建的socket,可以检测到所有的二层报文。raw socket实现的核心在于,socket的建立,并注册到相应的数据中,实现在收包阶段把报文提交给...
  • 证词是一种单机,多进程的体系结构,用于跨进程共享AF_PACKET数据。 这样就可以将数据包一次从NIC复制到内存中。 然后,多个进程可以并行处理此数据包数据,而无需其他副本。 证词允许用户使用不同的过滤器,块等...
  • 原始套接字AF_PACKET用法尝试

    千次阅读 2019-10-10 14:14:14
    PACKET_MMAP实现原理分析 2014年10月06日 ⁄ 综合 ⁄ 共 4737字 ⁄ 字号 小 中 大 ⁄ 评论关闭 PACKET_MMAP实现原理分析 samonr4l | 更新时间:2011-08-11 16:56:32 | 点击数:155自动刷新 PACKET_MMAP实现...
  • AF_PACKET套接字解密 --- 01 2012-05-23 22:08:23 分类: LINUX 使用socket(AF_PACKET, SOCK_RAW, ETH_P_ALL)创建的套接字到底为何于众不同,今日追踪了一下。使用Linux 3.2.5版内核 net/socket.c ...
  • AF_PACKET发送以太网帧(IP)

    千次阅读 2018-08-31 16:21:54
    fprintf(stderr, "./packet_client [MAC ADDR (00:11:22:33:44:55)]\n"); return (-1); } pmac = argv[1]; sscanf(pmac, "%02x:%02x:%02x:%02x:%02x:%02x", &dstmac[0], &dstmac[1], &dstmac[2], &dstmac[3...
  • 基础知识参考: ...对于AF_PACKET,虽然使用了mmap从内核映射报文,但其内部的处理,无论在收包,还是在发包上,都还会执行一次memcpy到vpp的vlib_buffer中,因此这里会有一次报文拷贝。
  • int sock_raw_fd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); if(sock_raw_fd ){ perror("socket"); return -1; } unsigned char buf[1024] = {0}; int len = recvfrom(sock_raw_fd, buf, sizeof(buf...
  • image.png
  • 簡單寫一下思路 這個東西需要namespace方面的支援, 首先open socket , 一連串路徑(packet_set_ring()->init_prb_bdqc()->prb_setup_retire_blk_timer()->prb_init_blk_timer()->prb_init_blk_timer()-&...
  • // linux 2.0 以前的版本是用struct sockaddr_pkt 的, //而且获取二层的socket是通过socket(AF_INET, SOCK_PACKET, protocol)来获取的, // 并没有AF_PACKET 这个domain ,只有SOCK_PACKET这个socket_type // -- ...
  • af_inet 与 pf_packet

    2015-08-01 11:04:30
    socket PF_PACKET sock_raw:->packet_create->dev_add_pack Modify ptype_base|ptype_all:二层协议 接收过程:netif_rx->process_backlog->netif_receive_skb:ptype_base|ptype_all   socket AF_INET sock_raw...
  • socket PF_PACKET sock...packet_create->dev_add_pack Modify ptype_base|ptype_all:二层协议接收过程:netif_rx->process_backlog->netif_receive_skb:ptype_base|ptype_allsocket AF_INET sock_raw:->...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,623
精华内容 7,449
关键字:

af_packet