如何将原始套接字绑定到特定接口

我的应用程序正在CentOS 5.5上运行。
我正在使用原始套接字发送数据:

sd=socket(AF_INET、SOCK_RAW、IPPROTO_RAW);
如果(标准差<0){
//错误
}
常数int opt_on=1;
rc=setsockopt(m_SocketDescriptor、IPPROTO_IP、IP_HDRINCL和opt_on、sizeof(opt_on));
如果(rc<0){
关闭(sd);
//错误
}
sin中的结构sockaddr_;
memset(&sin,0,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin\u addr.s\u addr=我的ip地址;
if(发送到(m_SocketDescriptor,DataBuffer,(size_t)TotalSize,0,(struct sockaddr*)和sin,sizeof(struct sockaddr))<0){
关闭(sd);
//错误
}

如何将此套接字绑定到特定的网络接口(例如eth1)

常量字符*opt;
opt=“eth0”;
const len=strnlen(opt,IFNAMSIZ);
如果(len==IFNAMSIZ){
fprintf(标准名称,“iface名称太长”);
返回1;
}
setsockopt(sd、SOL_插座、SO_绑定到设备、opt、len);

第一行:设置变量

第二行:告诉程序绑定到哪个接口

第3-5行:获取接口名称的长度,并检查其大小是否过大

六行:设置套接字sd的套接字选项,绑定到设备opt

setsockopt原型:

int setsockopt(int s,int level,int optname,const void*optval,socklen\t optlen);

另外,请确保包含if.hsocket.hstring.h头文件

发表评论