我的应用程序正在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.h、socket.h和string.h头文件