- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要的是,我将打开一个UDP
服务器,在X
端口(本地机器)和一个机器(公共(public)IP)中监听
可以发送 UDP
数据包给我。我的机器没有公共(public) IP
。基本上我需要stun
。
我正在测试 stuntman
服务器/客户端项目。我在服务器(公共(public)IP)中运行stuntman-server。在我的系统中运行客户端(本地IP)。我请求 9999
端口的映射 IP/端口。
./stunclient --mode full --protocol udp --localport 9999 stun.server.ip
Stun 服务器返回 IP 和端口。然后我做了什么,在本地系统中打开一个 UDP
服务器(使用 java)并开始监听 9999
端口并从以下位置发送 UDP
消息: 其他机器(具有公共(public) IP)
到 stun 服务器返回的映射 IP/端口
。但我无法接收任何数据。您可以假设我的服务器/客户端代码(用 java 编写)在本地网络中运行良好。
流程:
My machine ->>>>>stun request for 9999 port and my ip ------> stun server
My machine <<<<<<<<<<<<<<<<<<mapped ip/port <<<<<<<<<<<<<<< stun server
My machine : Run JAVA udp server socket in 9999 port
My machine <<<<<<<<<<<<<<<<<<<UDP message to mapped ip/port<<<<<< other public machine
xxxxxxxxxxxxxxxxxxxNot workingxxxxxxxxxxxxxxxxxxxxxxxx
最佳答案
您没有发布 stunclient
运行的结果,但我想它看起来类似于以下内容:
$ stunclient --mode full --localport 9999 stunserver.stunprotocol.org
Binding test: success
Local address: 192.168.1.8:9999
Mapped address: 1.2.3.4:9999
Behavior test: success
Nat behavior: Endpoint Independent Mapping
Filtering test: success
Nat filtering: Address and Port Dependent Filtering
我猜测您的行为测试是“端点独立”,过滤测试是“地址和端口相关”,因为这些测试在家庭中最常见,并且大多与您上面描述的相符。 (又名“端口限制 NAT”)。
无论如何,这意味着您已经在自己和 STUN 服务器之间创建了端口映射。在上面的示例中,我的公共(public) IP 地址是 1.2.3.4。这是常见的,但并非总是如此,我的本地端口(9999)与公共(public)端口相同。
在内部,您的 NAT 保留一个如下所示的逻辑表:
------------------------------------------------------------------------------------
|| LOCAL IP | LOCAL PORT || EXT PORT || REMOTE IP | REMOTE PORT ||
||================================================================================||
|| 192.168.1.8 | 9999 || 9999 || 107.23.150.92 | 3478 ||
------------------------------------------------------------------------------------
由于您从端口 9999 向 stun 服务器 (107.23.150.92) 发送了一个数据包,NAT 会在其表中创建一个端口映射条目,持续几分钟。当数据包从 Internet 到达 NAT/路由器时,它会查阅该表。当响应从 STUN 服务器的 IP:端口返回时,NAT 能够根据上表中的“远程”字段将其转发到 NAT 后面的计算机。
但是您和您希望从中接收数据的“其他公共(public)计算机”之间没有端口映射。假设另一台计算机的 IP 地址是 2.4.6.8,并且它正在尝试从其本地端口 8888 发送数据。NAT 表中仍然没有任何内容可以将流量从 2.4.6.8:8888 映射到后面的主机NAT。因此,当流量从不在表中的主机到达 NAT 时,NAT 只知道将数据包丢弃在地板上。有一种称为“Cone NAT”的 NAT 分类可以在其中发挥作用,但这些并不常见。
对于您的情况,有一个简单的解决方法。从 STUN 服务器获取端口映射后,从同一本地端口 (9999) 向要从中接收数据的远程主机(和远程端口)发送另一个数据报。远程主机可以简单地忽略此数据报,但它会有效地在您的 NAT 上创建另一个端口映射条目
------------------------------------------------------------------------------------
|| LOCAL IP | LOCAL PORT || EXT PORT || REMOTE IP | REMOTE PORT ||
||================================================================================||
|| 192.168.1.8 | 9999 || 9999 || 107.23.150.92 | 3478 ||
|| 192.168.1.8 | 9999 || 9999 || 2.4.6.8 | 8888 ||
------------------------------------------------------------------------------------
发送到 2.4.6.8:8888 的简单 1 字节数据包允许 NAT 将流量从该地址转发回 NAT 后面的主机。
换句话说,使用您自己的网络流命名法:
My machine:9999 ---->[STUN BINDING REQUEST]--->stun server:3478
My machine:9999 <----[STUN BINDING RESPONSE mapped IP:port]<--- stun server:3478
My machine:9999 [Open socket on port 9999]
My machine:9999 ---->[1 byte datagram] -------> 'other:8888'
My machine:9999 <---- [UDP to public IP:port obtained in step 2]<----'other:8888'
通常,在正常的 P2P 流程中,两个端点都与 STUN 服务器一起工作来发现其端口映射。然后使用另一个服务在彼此之间交换IP:端口信息。根据您的描述,您正在程序之间手动交换这些值,这对于测试来说很好。
如果另一台计算机位于公共(public)互联网上,从技术上讲,您不需要 STUN。第一台机器(在 NAT 后面)可以直接发送到远程 IP 和端口来表示“向我发送一些数据”。远程端只需检查该消息的对等地址和端口来决定发送回何处。端口映射已经创建。一些 RTSP 客户端假设服务器是公共(public)的
我对套接字NAT遍历基础知识的回答是here .
我碰巧认识 STUNTMAN 的开发者。他是一个相当不错的人,长相英俊,而且非常聪明。他们还说我和他长得很像,而且我们名字的拼写也几乎相同。如果您对 STUN 和 NAT 穿越有疑问,可以直接给他发邮件。
关于stun - 关于 stun 服务器的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22712298/
我需要的是,我将打开一个UDP服务器,在X端口(本地机器)和一个机器(公共(public)IP)中监听 可以发送 UDP 数据包给我。我的机器没有公共(public) IP。基本上我需要stun。 我
我正在查看 webrtc.html 和 peerconnection_server 演示,它在两个 Chrome 浏览器之间运行良好。我的问题是, webkitPeerConnection 的第一个参
我刚刚下载了一个视频聊天项目。它使用 STUN 服务器并指定 URL stun:23.21.150.121。我如何使用自己的服务器而不是 STUN 服务器?我必须输入什么来代替这个 URL? 最佳答案
我了解 STUN 和 TURN 服务器的用途以及它们在 WebRTC 中的用途,但我不完全明白: 如果我作为WebRTC客户端已经登录使用WebRTC服务,那么该服务不是已经拥有我的公共(public
我正在尝试使用一些全局可用的 STUN 服务器,以便它们可以告诉我我的 NAT 映射,以便使用 UDP 遍历 NAT。服务器位于此网页上: http://www.tek-tips.com/faqs.c
我正在编写一个 RTP 中继,但遇到了一个问题。 基于libnice threaded example我编写了软件部分使用 STUN 连接到在 chrome 中运行的 javascript。 基本上这
我在没有基本服务器的情况下对 p2p 通信进行了一些研究,并且研究了 STUN。从我读过的内容来看,STUN 是一种 NAT“打洞”方式,不需要对等端进行端口转发即可连接。这是正确的,打洞究竟是什么意
我想弄清楚如何测试 STUN/TURN 服务器是否处于事件状态并正确响应连接。理想情况下,此测试将从外部机器执行,以防万一 STUN/TURN 机器在这种情况下关闭,连接测试也应报告。 过去有人调查过
(async function() { var iceServers = [{ urls: ["stun:stun.l.google.com:19302"] }]; var p
我目前正在尝试通过 Internet 发送 UDP 消息,并且必须为端点 A 和 B(都位于 NAT 后面)设置防火墙。为此,我想使用 STUN 服务器进行打洞。 当 A 创建对 STUN 服务器的请
假设我们正在使用启用了 WebRTC 的 Asterisk。当我们尝试在不同网络上的两台主机之间建立连接时,我们需要使用STUN 服务器可以正确确定其公共(public)地址,以防它们位于 NAT 之
Java,我试图编写自己的 STUN 客户端,但似乎我犯了错误,因此,大多数时候它被卡住了。所以我想知道哪些 STUN 客户端库可用于 Java,以便开始。 跟进:(同时尝试跟进,仍然没有涉及NAT/
我已经阅读了 RFC 5389 和 RFC 5245 以及更新的 RFC 8445。我了解 STUN 如何返回服务器反身地址或中继地址。请求被发送到 STUN 服务器。 我的基本问题是关于使用 STU
我已经安装了 TURN 服务器,服务器代码中的一切工作正常。日志文件中没有错误。只是一个警告说明 0: WARNING: I cannot support STUN CHANGE_REQUEST f
我刚刚开始学习用于实现音频和视频应用程序的 WebRTC,并且知道有各种公共(public) stun 服务器可用于对等连接。但是我有点困惑我可以将这些公共(public)服务器用于商业应用程序吗?
我有自己的 ubuntu 19 服务器。 注意:我需要一个用于视频聊天 Web 应用程序的 stun/turn 服务器。如果两个设备都在同一个网络中,它已经可以工作了。 我已经成功安装并配置了cotu
我决定创建自己的 STUN 服务器,并将其与以下 JS 库一起使用 https://simplewebrtc.com 。 我决定使用这个:http://www.stunprotocol.org/ 我已
以下是来自此 GitHub 项目的引用 STUN IP Address requests for WebRTC . These request results are available to Jav
我正在为我的 WebRTC 应用程序(构建在 mediasoup 之上)传递一些 STUN 和 TURN 服务器。当我这样做时,我在控制台中收到一条消息,告诉我:“使用两个以上的 STUN/TURN
我的 Activity 中有 ProgressBar,它一直在旋转。我正在尝试连接到可用的网页 -我使用输入流 InputStream input = new URL(url).openStream(
我是一名优秀的程序员,十分优秀!