小编Dau*_*uie的帖子

PACKET_MMAP TX_RING后续send()调用的问题

感谢您抽出宝贵时间来看看这个.这是我已经处理了一个星期左右的问题,而且我傻眼了.任何输入都会很棒.

我目前使用PACKET_MMAP TX_RING V3(我试过V2和V1,但我与他们有同样的问题.我已经决定使用V3,因为我能够保持一个块多ETH帧,而不是只能够在V1和V2中每个tp_block有1帧,以避免在我的端口扫描器的发送过程中进行过多的系统调用.我没有设置RX_RING,因此这不是图片的一部分.

现在我只用一台主机测试这个,我只打了5个端口,我知道它们是活跃的.

所以...这是情况:

我有一个TX_R​​ING:[1块| 块大小4096 | 32帧| 帧大小128]

TX_RING设置的代码:

int                     prepare_packetmmap_tx_ring(t_thread *thread)
{
    int                 tpacket_v;
    struct sockaddr_ll  sll_loc;

    /* Step 1 Create PF_PACKET socket.*/
    thread->sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
    if (thread->sock == -1)
    {
        toggle_thread_alive(thread);
        return (hermes_error(FAILURE, "socket() %s", strerror(errno)));
    }

    memset(&sll_loc, 0, sizeof(struct sockaddr_ll));
    memcpy(&sll_loc.sll_addr, thread->pool->iface.if_hwaddr, ETH_ALEN);
    sll_loc.sll_ifindex = thread->pool->iface.inx;
    sll_loc.sll_family = AF_PACKET;
    sll_loc.sll_protocol = htons(ETH_P_ALL);
    /* Bind our socket to the interface */
    if (bind(thread->sock, (sockaddr *)&sll_loc, sizeof(struct sockaddr_ll)) == -1)
    {
        toggle_thread_alive(thread);
        return (hermes_error(FAILURE, …
Run Code Online (Sandbox Code Playgroud)

c sockets mmap raw-sockets linux-kernel

6
推荐指数
0
解决办法
170
查看次数

标签 统计

c ×1

linux-kernel ×1

mmap ×1

raw-sockets ×1

sockets ×1