小编Vla*_*lad的帖子

无法将原始套接字绑定到接口

我正在努力将原始套接字绑定到接口,我的目标是实现简单的数据包嗅探器.已经专门的时间搜索网络并浏览了参考文献,其中一部分列在底部.

我能够打开套接字,绑定没有错误,但是当剥离以太网报头并观察IP报头时,我看到捕获的环回(127.0.0.1)和其他不受欢迎的ethX ifaces流量.

其中一个结论是在我的情况下不能使用setsockopt,这是我的代码片段:

struct sockaddr_ll sll;
int raw_sock;

raw_sock = socket( PF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) ;
// also tried with AF_PACKET

bzero(&sll , sizeof(sll));

sll.sll_family = PF_PACKET; 
// also tried with AF_PACKET
sll.sll_ifindex =get_iface_index(raw_sock,"eth1");
// returns valid ifr.ifr_ifindex;
sll.sll_protocol = htons(ETH_P_ALL);
if((bind(raw_sock , (struct sockaddr *)&sll , sizeof(sll))) ==-1)
{
    perror("bind: ");
    exit(-1);
}

saddr_size = (sizeof sll);
data_size = recvfrom(raw_sock , buffer_ptr, 65536, 0 , &sll , (socklen_t*)&saddr_size);
Run Code Online (Sandbox Code Playgroud)

提前谢谢!

参考文献: …

c sockets linux bind raw-sockets

5
推荐指数
1
解决办法
4851
查看次数

标签 统计

bind ×1

c ×1

linux ×1

raw-sockets ×1

sockets ×1