我最近在写一个程序,需要从指定的网卡发送数据包,本人是菜鸟,对此不熟,希望大侠们能给指条明路,多谢了。
原帖由 zwhermes 于 2006-9-5 23:58 发表不太明白。这不是获取指定的MAC地址吗?我是想让socket使用指定的网卡发包。能不能再说明白一点?
>>>>>>ifr.ifr_name就是网卡的名字,例如"eth0"。这一段的意思就是设置ifr.ifr_name为发包的设备。>>>>
不太明白。这不是获取指定的MAC地址吗?我是想让socket使用指定的网卡发包。能不能再说明白一点?
原帖由 zwhermes 于 2006-8-30 19:55 发表我写的程序使用raw_socket。是不是将socket通过函数bind绑定指定网卡的IP就能通过该网卡发送数据?
>>>>>>指定网卡发送数据的时候不需要指定网卡IP,只要设置struct ifreg ifr.ifr_name就可以了。>>例如:>> struct ifreq ifr;>> fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));>> memset(&ifr, 0, sizeof (ifr));>> strncpy(ifr.ifr_name, device, sizeof (ifr.ifr_name) -1);>> ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '';>> if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 )>> {>> snprintf(err_buf, ERRBUF_SIZE,>> "SIOCGIFHWADDR: %s", strerror(errno));>> return -1;>> }>>>>
我写的程序使用raw_socket。是不是将socket通过函数bind绑定指定网卡的IP就能通过该网卡发送数据?
原帖由 zwhermes 于 2006-8-28 22:59 发表我最近在写一个程序,需要从指定的网卡发送数据包,本人是菜鸟,对此不熟,希望大侠们能给指条明路,多谢了。
>>>>>>如果不想自己写raw_socket,直接使用LibNet就可以了,很好用的程序库。>>>>
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(5)
>>
>>
>>ifr.ifr_name就是网卡的名字,例如"eth0"。这一段的意思就是设置ifr.ifr_name为发包的设备。
>>
>>
不太明白。这不是获取指定的MAC地址吗?我是想让socket使用指定的网卡发包。能不能再说明白一点?
>>
>>
>>指定网卡发送数据的时候不需要指定网卡IP,只要设置struct ifreg ifr.ifr_name就可以了。
>>例如:
>> struct ifreq ifr;
>> fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
>> memset(&ifr, 0, sizeof (ifr));
>> strncpy(ifr.ifr_name, device, sizeof (ifr.ifr_name) -1);
>> ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '';
>> if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 )
>> {
>> snprintf(err_buf, ERRBUF_SIZE,
>> "SIOCGIFHWADDR: %s", strerror(errno));
>> return -1;
>> }
>>
>>
我写的程序使用raw_socket。是不是将socket通过函数bind绑定指定网卡的IP就能通过该网卡发送数据?
>>
>>
>>如果不想自己写raw_socket,直接使用LibNet就可以了,很好用的程序库。
>>
>>