如何使用环回模拟外部IP地址?

问题描述

因此,我有一个软件可以创建udp套接字并订阅多播组,并且很不错。外部软件运行着一堆硬件,所以我也想创建一个模拟器模式。好吧,现在我被困住了,有没有一种方法可以使用环回接口来模仿该外部ip地址而无需更改主代码?

struct sockaddr_in localSock;
struct ip_mreq group;
int sd;
int datalen;
char databuf[1024];

...etc stuff here 

/* Bind to the proper port number with the IP address */

memset((char *) &localSock,sizeof(localSock));
localSock.sin_family = AF_INET;
localSock.sin_port = htons(5674);
localSock.sin_addr.s_addr = INADDR_ANY;

if(bind(sd,(struct sockaddr*)&localSock,sizeof(localSock))){
perror("Binding datagram socket error");
close(sd);
exit(1);
}

/* Join the multicast group  */
group.imr_multiaddr.s_addr = inet_addr("224.0.0.32"); //multicast group
group.imr_interface.s_addr = inet_addr("10.20.100.3"); //interface to recv from

if(setsockopt(sd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *)&group,sizeof(group)) < 0){
perror("Adding multicast group error");
close(sd);
exit(1);
}

/* Read from the socket. */
while(true){
datalen = sizeof(databuf);
if(read(sd,databuf,datalen) < 0){
perror("Reading datagram message error");
close(sd);
exit(1);
}

else{printf("The message from Lrcc: \"%A\"\n",databuf); }
return 0;
}

}

所以在sim卡中我有一个

 sendto(sockfd,(char *) &buf,sizeof(buf),sockaddr *dest_addr(x),sizeof(x));

我可以在该函数中放入环回地址,但是我的主程序正在通过多播组寻找流量,我可以通过环回以某种方式欺骗224.0.0.32吗?更进一步,我想我的模拟器也必须发送多播,或者我可以只使用一个多播地址,因为它永远不会离开nic吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)