linux下socket收IP数据包

这篇博客介绍了如何在Linux环境下使用socket编程接口创建RAW套接字,以捕获和处理IP层的数据包。首先,通过socket()函数创建一个PF_PACKET类型的套接字,然后利用ioctl()和SIOCGIFINDEX获取网络接口索引,便于绑定到特定网络设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static int init_socket()

{

  int   raw_sockfd_l2 = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));

  struct sockaddr_ll sock_ip_pack;


    if (raw_sockfd_l2 < 0)
    {
        printf("%s:%d:%s create the l2 raw socket is fail",__FILE__,__LINE__,__func__);
        return ret;
    }

    sock_ip_pack.sll_family = AF_PACKET;
    sock_ip_pack.sll_ifindex = get_interface_index(raw_sockfd_l2, "eth0");
    sock_ip_pack.sll_protocol = htons(ETH_P_IP);

    if (bind(raw_sockfd_l2, (struct sockaddr *)(&sock_ip_pack), sizeof(sock_ip_pack)) < 0)
    {
        CWDebugLog("%s:%d:%s bind is fail",__FILE__,__LINE__,__func__);
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值