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

当主机多地址时,sendto()发送函数为什么携带的源IP地址永远都是第一个?

    来源: 互联网  发布时间:2017-01-08

    本文导语:  本人使用socket写了一个UCP服务端程序。主要就是接受,然后发送。 环境如下:          eth0 = 192.168.15.15          eth0:1 = 192.168.15.16 一个eth0接口有2个同网段的地址, servaddr.sin_family = AF_INET; servaddr.sin_addr...

本人使用socket写了一个UCP服务端程序。主要就是接受,然后发送。
环境如下:
         eth0 = 192.168.15.15
         eth0:1 = 192.168.15.16
一个eth0接口有2个同网段的地址,
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
if(bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1)
{
exit(1);
}
while(1)
{
address_size = sizeof(cliaddr);
n = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr *)&cliaddr, &address_size);
printf("you ip is %s at port %d:%sn",
             inet_ntop(AF_INET, &cliaddr.sin_addr,str,sizeof(str)),
             ntohs(cliaddr.sin_port),buf);
n = sendto(sockfd, buf, strlen(buf)+1, 0, (struct sockaddr *)&cliaddr, address_size);
printf("n = %dn", n);
}

现在的问题是,不管客户端访问的是192.168.15.15(eth0)还是192.168.15.16(eth0:1).抓包发现sendto发送函数携带的源IP都是192.168.15.15(eth0),也就是说我访问192.168.15.15,回复我的却是192.168.15.16。为什么?

|
你的服务器IP地址用的是通配地址啊,所以外出的接口就由内核来给你选择了。
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
你这里指定一个固定的IP地址就不会这样了。把INADDR_ANY换成192.168.15.15或者是192.168.15.16

    
 
 

您可能感兴趣的文章:

  • <请教如何把IP地址转为主机名,焦急等待中...请高手帮忙>
  • 两台主机ping ipv6地址的问题
  • 无法确定主机IP地址时产生。
  • 请教局域网中如何通过ip地址得到主机名
  • 在Linux下,如何通过命令行方式设置主机的网关的IP地址。
  • vmware能否设成跟主机一个ip地址?
  • 看unix主机的ip地址
  • 能不能根据局域网里的ip地址得到主机名呢?急!!!!!!!!
  • 如何通过主机名域名 得到IP地址
  • 关于在linux下"通过ip地址获取它的主机名"谁有比较好的函数或例子,谢谢,加分!
  • python通过scapy获取局域网所有主机mac地址示例
  • getutent函数中的int32_t ut_addr_v6[4];远程主机的网络地址怎么取出来
  • 一个多线程搜索主机名(或IP地址)的问题
  • php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
  • 求助socket编程问题:C/S模式.客户端调用Winsock函数connect()的时候,返回错误码是10065(主机路由不可达).
  • PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 主机访问桥接虚拟机web服务器失败,同网段其他主机可以访问
  • vmware虚拟机linux不能ping通主机,主机能ping通虚拟机
  • 我在windows下telnet到linux主机,想得到linux主机的一个文件该怎么办?
  • 更改主机名,用hostname更改后启动,又是原来的主机名
  • 主机能ping到虚拟机,但虚拟机ping主机不成功。
  • 不同ip,相同主机名的unix系统会不会冲突?主机名用什么命令改?
  • 在linux下,如何访问另一台linux主机?如何访问windows主机?
  • 主机和虚拟机可以互相ping 通,主机可以上网,但是虚拟机ping不通外网!!!急急急
  • sftp实现两台主机之间传输文件(把一个主机中的文件拷贝到另一个)
  • 有没有办法编个叫本代替我登陆到自己的主机, 执行FTP命令下载另一个主机的文件?
  • unix 下 C++实现 ftp 到另一台主机上 修改文件内容 !能不能直接在主机上修改 还是只能get下来本地修改完后 在put上去
  • 为什么用new socket(主机名,端口号)的方法连接不上用serversocket(端口号)的主机
  • 虚拟主机Linux(Ubuntu9.10)连接主机 的路由器Or无限网卡上网方法
  • linux获取主机名后用gethostbyname() 不能获取主机ip
  • 怎样使两个主机的连通
  • linux 主机名配置问题
  • scp远程两台主机时如何指定端口
  • 网络技术 iis7站长之家
  • 主机ping不通虚拟机
  • hostname改变主机名


  • 站内导航:


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

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

    浙ICP备11055608号-3