封装arp数据包并发送出去所遇到的问题

封装arp数据包并发送的时候遇到了两个问题:

1)当创建套接字时使用了原始套接字:rawfd = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ARP));但是在执行时       出现rawfd=-1的情况,并且errno=1,执行未允许;原因:没有使用root权限进行执行,只是使用了一个用户权限,所       以创建不了套接字。

2)当使用sendto发送arp数据包时,ret = sendto(rawfd,arp_packet,42,0,(struct sockaddr *)&dest_ether,dest_etherlen);

       出现ret=-1,errno=6的情况,不存在设备或地址;原因:在获取dest_ether时使用了strcpy(ifr.ifr_name,"eth0");
ioctl(rawfd,SIOCGIFINDEX,&ifr);这里用到了套接字rawfd,而rawfd的创建被我放到了后面。

说明:封装的arp请求广播发送出去后会收到arp响应包,但此时linux操作系统会忽略这个响应包,并不会更新本机arp缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值