当前位置:  技术问答>linux和unix

请问如何选择网卡进行socket编程?

    来源: 互联网  发布时间:2015-05-13

    本文导语:  原来我有一块网卡,创建socket自然就在eth0上,由于需要,我在我的电脑上又装了一块网卡,命名为eth1,我想在eth1上也创建socket进行网络接收,但不知怎样将socket绑定在eth1上,请问各位大侠怎么设定? | ...

原来我有一块网卡,创建socket自然就在eth0上,由于需要,我在我的电脑上又装了一块网卡,命名为eth1,我想在eth1上也创建socket进行网络接收,但不知怎样将socket绑定在eth1上,请问各位大侠怎么设定?

|
SOCK_PACKET是接收链路层报文,所以不能绑定IP地址。这时应该绑定的是设备名,如下面的libpcap的代码:
/*
iface_bind_old:

Bind the socket associated with FD to the given device using the 
interface of the old kernels.
*/
static int
iface_bind_old( int fd, const char *device, char *ebuf )
{
struct sockaddr saddr;

memset( &saddr, 0, sizeof(saddr) );
strncpy( saddr.sa_data, device, sizeof(saddr.sa_data) );
if( bind(fd, &saddr, sizeof(saddr)) == -1 ) {
sprintf( ebuf, "bind: %s", pcap_strerror(errno) );
return -1;
}

return 0;
}
注意是old接口。新的接口用的是新的PF_PACKET族协议:
sock_fd = socket( PF_PACKET, SOCK_RAW, htons(ETH_P_ALL) );
绑定方式为:
/*
iface_bind:

Bind the socket associated with FD to the given device. 
*/
static int
iface_bind( int fd, int ifindex, char *ebuf )
{
struct sockaddr_ll sll;

memset( &sll, 0, sizeof(sll) );
sll.sll_family = AF_PACKET;
sll.sll_ifindex = ifindex;
sll.sll_protocol = htons(ETH_P_ALL);

if( bind(fd, (struct sockaddr *) &sll, sizeof(sll)) == -1 ) {
sprintf( ebuf, "bind: %s", pcap_strerror(errno) );
return -1;
}

return 0;
}
参考libpcap的实现。

    
 
 

您可能感兴趣的文章:

  • 我在安装netware 操作系统时, 在选择网卡型号时, 找不到我的网卡的型号, 请问怎样办?
  • Red hat 9.0 无法识别USB移动硬盘, 无法识别网卡和无线网卡,请问如何安装驱动?
  • 请问 如何在 solaris 下装 网卡驱动(网卡不能被识别)
  • 我的网卡在redhat7.3下不能自动驱动,但我有for linux的驱动程序,请问如何才能驱动我的网卡,我是菜菜,请详细说明,谢谢!
  • 请问,在SCOUNIX下,如何更改网卡的MAC地址?
  • 我在linux中把 网卡删除了,请问如何将他安装?
  • 要写一个无线网卡的驱动,请问怎么下手?
  • 请问是不是有的网卡linux不认???
  • 请问在red hat linux7.3怎么装网卡
  • 请问在文本终端下,怎么用shell命令使网卡发送数据?
  • 请问如何在内核中得到无线网卡IP?
  • 请问:我如何指定网卡进行监听?
  • 请问如何在以安装好的linux下装网卡?
  • 请问如何为一块网卡设置多ip?
  • 问题:网卡始终是Inactive(没有激活)状态,也上不了网,请问?
  • 请问网卡为什么不能激活
  • 请问怎么设置网卡的混杂模式
  • 请问Fedora Core 5是否支持无线网卡?
  • 请问在DOS下联网时,如何才能改网卡的I/O地址
  • 请问如何在REDHAT 9下安装3c509b网卡驱动
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • 请问LINUX编程(内核编程)是在什么环境下用什么IDE编?
  • 请问什么是shell编程?一般都用shell编程实现什么?
  • 我想买台二手笔记本作编程,请问java编程的最低配置是多少,价几何
  • 请问linux/unix下编程与windows下编程有什么不同呢??
  • 请问linux中,如何编程知道硬盘是否格式化,如何编程实现格式化。最好有现成接口,谢谢。
  • 请问:如果懂unix编程,那么会懂linux编程吗?一般来说:它们有什么关系呢?
  • 菜鸟问题:请问要在Linux操作系统下完成TCP/IP网络编程,用什么编程工具好?
  • 请问linux下C/C++编程语言,同时请推荐相关书籍
  • 请问小红帽支持中文的c,c++,数据库,阿帕奇等编程吗?
  • 请问jsp,java在window和linux下编程有什么不同?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 下来了FREE BSD的镜像 请问,是直接刻录就可以光盘启动进行安装吗?还是有特殊的要求(我想用光盘启动进行安装)
  • 跪求:请问如何在程序中写代码调用函数对硬盘进行分区和格式化
  • 请问javaBean能不能进行非本机的socket连接
  • 请问模块如何与用户程序进行数据交换
  • 请问在Ubuntu下用什么方法可以进行代码的性能测试?
  • 请问LINUX操作系统是怎样对外围设备进行操作的
  • 急!请问怎样用jrelibrt.jar进行JDBC-ODBC连接?在线等!!
  • 请问:有没有对数组(int)进行排序的的方法???
  • 请问用 ls 命令时,怎样将显示的结果以页为单位进行显示
  • 请问在linux/unix下有没有象GetKeyboardState()一样对键盘状态进行控制的函数?
  • 请问大虾,如何将静态库文件 .a 进行反编译? 在线等
  • 请问:Ipchains 怎么进行端口映射?
  • 请问怎么用sort对多个字段进行排序?
  • 请问如何通过C对modem进行自动ppp拨号
  • 请问RPM能不能在线搜索包进行安装
  • 请问,为什么我的普通用户都不能进行登陆了?
  • Redflag 5.0里没有minicom,请问该如何进行安装?
  • 请问在linux下用什么软件进行图形界面开发最容易
  • 请问如何对Double对象进行运算?
  • 菜鸟问题: 请问如何创建一个文件来进行编程
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3