gpt4 book ai didi

java - Java 中的简单 STUN 客户端

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:12 26 4
gpt4 key购买 nike

我找到了几个 java STUN 实现

Java and Which Stun libraries i should use?

There is

See also: STUN, TURN, ICE library for Java

但它是有很多类的 jar 。我希望以单一方法或至少单个小类的形式找到一些简单的东西。就像下面的 python 代码一样。

https://github.com/jtriley/pystun/blob/develop/stun/init.py

Java 中的 STUN 如此巨大的合理答案也是可以接受的。

最佳答案

Java 中的 STUN 如此巨大的合理答案也是可以接受的。

这是一个合理的问题。 99% 的 STUN 只是一个简单的回显/响应协议(protocol),客户端可以通过它与公共(public)互联网之间的 NAT 自行发现 IP 和端口映射。已建成a STUN library in C++ ,我有点见识了。

让我们考虑一下 STUN 库需要什么:

  • 生成带有属性字段架构的 STUN 消息的消息编写器,该架构不仅允许字段以任何顺序出现,还允许添加自定义属性。

  • 可以读回此类消息并将数据转换为数据的消息解析器代码使用的结构合理。它需要安全地执行此操作并避免未处理的异常。

  • 用于发送/接收此类消息的套接字网络代码。 STUN 服务器在技术上需要监听 2 个 IP 和 2 个端口,因此这使得服务器的网络代码有点复杂。

  • 如果我们只关心绑定(bind)请求和绑定(bind)响应,我们会完毕。但是 STUN RFC 也定义了一组 NAT 分类测试。因此,需要额外的状态机逻辑才能使任何此类库完整。

  • 如果 STUN 库要完全使用协议(protocol)提供的安全选项,它将需要一定数量的加密代码来对消息进行散列和签名

因此,将所有这些组合到一个库中,任何人都可以将其用于 STUN 的所有不同目的,包括映射地址发现、NAT 分类和 ICE 协商,它开始快速变大。

您可以轻松地滚动一些硬编码绑定(bind)请求字节的套接字代码,然后进行一些破解解析以解析响应。这可能会满足您自己的需求,但一个完善的开源库永远不会以这种方式编写。

JSTUN是一个好的开始。我与原作者共享了一些互操作和错误修复代码。他没有积极维护它,但它是 RFC 3489 的一个很好的实现。我什至破解了它一次以在 Android 上运行。

在 JSTUN 中生成一个 STUN 绑定(bind)请求。

MessageHeader sendMH = new MessageHeader(MessageHeader.MessageHeaderType.BindingRequest);
sendMH.generateTransactionID();

// add an empty ChangeRequest attribute. Not required by the standard, but JSTUN server requires it
ChangeRequest changeRequest = new ChangeRequest();
sendMH.addMessageAttribute(changeRequest);

byte[] data = sendMH.getBytes();

// not shown - sending the message

然后解析响应:

byte [] receivedData = new byte[500];

// not shown - socket code that receives the messages into receivedData
receiveMH.parseAttributes(receivedData);
MappedAddress ma = (MappedAddress) receiveMH.getMessageAttribute(MessageAttribute.MessageAttributeType.MappedAddress);

然后将上面的内容与一些套接字代码结合起来。可以在 DiscoveryTest.java 源文件中找到将上述内容与套接字代码相结合的最佳示例。您实际上只需要此类的 test1() 方法中的代码。

关于java - Java 中的简单 STUN 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com