p2p nat穿透不通,nat类型为端口限制锥形

21克的重量 2018-07-17 11:00:11
openwrt路由器想做nat穿透,在路由器上启动stun客户端连接公用stun服务器测试,nat类型为端口限制锥形,但是一直不通。 然后自己搭了个stun服务器,发现路由器上同一个端口发出来的数据在两个服务器上接收到的外网ip和端口确实是一致的。 但是自己简单写了一个测试程序(就是直接打开一个socket然后用同一个udp套接字往两个服务器发送数据)结果在两个服务器上接收到的数据外网端口不一致。求大神解答!!!!!!
 #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/socket.h>


int openPort( unsigned short port, unsigned int interfaceIp)
{
int fd;

fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

struct sockaddr_in addr;
memset((char*) &(addr),0, sizeof(struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(port);
printf("addr.sin_addr.s_addr is %d,addr.sin_port is %d \n",addr.sin_addr.s_addr,addr.sin_port);

if ( (interfaceIp != 0) &&
( interfaceIp != 0x100007f ) )
{
addr.sin_addr.s_addr = htonl(interfaceIp);
}

bind( fd,(struct sockaddr*)&addr, sizeof(struct sockaddr_in));

return fd;

}



int sendMessage( int fd, char* buf, int l,
unsigned int dstIp, unsigned short dstPort)
{

int s;

printf("dstip is %d,dstport is %d\nbuf is %s\n",dstIp,dstPort,buf);
struct sockaddr_in to;
int toLen = sizeof(struct sockaddr_in);
memset(&to,0,toLen);

to.sin_family = AF_INET;
to.sin_port = htons(dstPort);
to.sin_addr.s_addr = dstIp;

s = sendto(fd, buf, l, 0,(struct sockaddr*)&to, toLen);


return 0;
}



int main()
{
int sockfd = -1;
sockfd = openPort(20000,0);
printf("fd is %d\n",sockfd);
char *buf1 = "i am first!";
sendMessage(sockfd,buf1,strlen(buf1),inet_addr("0.0.0.0"),18888);
usleep(10*1000);
sendMessage(sockfd,buf1,strlen(buf1),inet_addr("0.0.0.0"),20000);
return 0;
}
...全文
3412 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Stardust_12 2019-10-03
  • 打赏
  • 举报
回复
这是对称型吧,外侧无法建立连接,并且穿出连接的端口常会绑定不同的外网端口。端口限制锥形开放给你的口,外侧可以直接建立连接
asas110120 2018-09-20
  • 打赏
  • 举报
回复
你好,我最近也遇到这个问题。NAT类型为端口受限锥形
qq_28230605 2018-07-28
  • 打赏
  • 举报
回复
什么什么嘛噩噩噩噩噩噩噩噩
qq_28230605 2018-07-28
  • 打赏
  • 举报
回复
什么什么嘛噩噩噩噩噩噩噩噩
qq_28230605 2018-07-28
  • 打赏
  • 举报
回复
什么什么嘛噩噩噩噩噩噩噩噩

679

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧