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

套接字的疑惑

    来源: 互联网  发布时间:2017-03-22

    本文导语:  找了两个原始套接字的发包程序,发现一个疑惑 一个是用: struct sockaddr sa; sa.sa_family = PF_PACKET; strcpy(sa.sa_data, "eth0"); sendto(...&sa,sizeof(sa)); 另一个是用: struct sockaddr_in peer_addr; bzero(&peer_addr,sizeof(peer_addr)); peer_addr.s...

找了两个原始套接字的发包程序,发现一个疑惑
一个是用:
struct sockaddr sa;
sa.sa_family = PF_PACKET;
strcpy(sa.sa_data, "eth0");
sendto(...&sa,sizeof(sa));
另一个是用:
struct sockaddr_in peer_addr;
bzero(&peer_addr,sizeof(peer_addr));
peer_addr.sin_family = AF_INET;
peer_addr.sin_addr.s_addr = inet_addr("3.3.3.3");
sendto(...&peer_addr,sizeof(struct sockaddr));

两者有什么区别,sockaddr和sockaddr_in一样吗?
strcpy(sa.sa_data, "eth0");可以指定发送的接口
如果用sockaddr_in怎么指定发送的接口

|
sockaddr的尺寸和sockaddr_in一样,并且sockaddr是所有sockaddr_in/sockaddr_in6/sockaddr_un的基类, 大家都有sa_family字段,至于发包从哪个网卡出去,这是路由表决定的,你非得从一个根本没法到达目的地的(不是同网段或者没有默认网关)的网卡送出去一个包,是完全无聊的,所以你没必要限制网卡,在应用层来说就是没必要bind一个特定的本地IP。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。














站内导航:


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

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

浙ICP备11055608号-3