Tag: arp

ohrwurm如何使用libpcap和arpspoof来破坏RTP流量?

我正在尝试评估名为ohrwurm的工具,该工具声称能够破坏两个SIP端点之间的RTP流量。 通过阅读其源代码,我不相信它有效,并且在我尝试之前想要其他人的意见。 它的前提很简单: 假设端点A的IP地址为192.168.0.11,端点B的IP地址为192.168.0.22。 在与A和B相同的子网上的第三个盒子C上,在两个SSH会话中执行以下命令: arpspoof 192.168.0.11 arpspoof 192.168.0.22 执行ohrwurm。 看一下ohrwurm的源代码,它执行以下操作: 将/ proc / sys / net / ipv4 / ip_forward设置为1。 在混杂模式下使用libpcap拦截上面两个框之间的所有IP数据包。 对于那些SIP的数据包,请抓取RTP端口号。 对于那些UDP以及之前抓取的两个RTP端口之间的数据包,请对RTP内容进行模糊处理。 这是我没有得到的。 我接受arpspoof’ing将导致A和B之间的所有IP流量通过C.然后,通过将/ proc / sys / net / ipv4 / ip_forward设置为1,我们正在让内核正确转发此IP流量我们。 但我认为libpcap是只读的? 如何修改我们在原地混杂模式中嗅探的数据包? 您会注意到ohrwurm.c第401行 ,我们甚至试图丢弃RTCP数据包! 这可能吗? 我对libpcap一无所知,我很想知道更多! 请教育我。 谢谢。

linux ARP recvfrom信息

如果我发送ARP包,我可以从recv中找出发送者的IP地址是什么吗?我问这个是因为我将多个包发送到具有子进程的不同主机,并且我收到对所有子进程的响应所以我问如果有办法知道孩子送什么包裹。谢谢。 struct ether_arp req; struct sockaddr_ll addr={0}; struct ifreq inter; int sock;//I check usinginter if the interface is correct sock=socket(AF_PACKET,SOCK_DGRAM,htons(ETH_P_ARP)); if (sock==-1) { printf(“%s”,strerror(errno)); } if (ioctl(sock,SIOCGIFINDEX,&inter)==-1) { printf(“%s”,strerror(errno)); return ;//for the interface index addr.sll_family=AF_PACKET; addr.sll_ifindex=index; addr.sll_halen=ETHER_ADDR_LEN; addr.sll_protocol=htons(ETH_P_ARP); memcpy(addr.sll_addr,ether_broadcast_addr,ETHER_ADDR_LEN); req.arp_hrd=htons(ARPHRD_ETHER); req.arp_pro=htons(ETH_P_IP); req.arp_hln=ETHER_ADDR_LEN; req.arp_pln=sizeof(in_addr_t); req.arp_op=htons(ARPOP_REQUEST); …………………. memcpy(&req.arp_spa,&target_ip_addr.s_addr,sizeof(req.arp_spa));//this way I save the source IP ……. if (sendto(sock,&req,sizeof(req),0,(struct […]

我为什么要使用或不使用MSG_CONFIRM?

我熟悉BSD套接字,然后翻阅sendto的手册页,我碰到了MSG_CONFIRM标志,这对我来说是非常神秘的。 描述说: 告诉链接层转发进度:您从另一方获得了成功的回复。 如果链路层没有得到它,它将定期重新修复邻居(例如,通过单播ARP)。 仅在SOCK_DGRAM和SOCK_RAW套接字上有效,并且当前仅针对IPv4和IPv6实现。 在快速查看arp的手册页之后,我明白标记某些内容MSG_CONFIRM阻止ARP映射MAC地址↔远程计算机的IP地址被认为是陈旧的。 现在我感到困惑,因为我看不出任何我不应该提出的理由,因此,他们为什么不直接在图书馆强制执行。 为什么应用层应该处理在链路层发生的任何事情。 所以我错过了什么? 我什么时候应该设置它,还是不设置它?