我想在嵌入式linux设备上使用alljoyn框架。由于安全原因,需要为该设备配置防火墙。这是用iptables完成的。
到目前为止我所做的:
我尝试在没有防火墙的设备上运行aboutservice示例,然后检查tcpdump。作为客户端,我使用了AllJoyn(Windows10)的IoT资源管理器,但是AboutClient也应该工作得很好。用wireshark检查tcpdump,公告的端口是清晰的,我必须打开端口9955(alljoyn mcm)9956(alljoyn)和5353(mdns???)对于udp。我用以下规则解决了这个问题:
$ iptables -A OUTPUT -p udp --sport 9955 -j ACCEPT
$ iptables -A OUTPUT -p udp --sport 9956 -j ACCEPT
$ iptables -A OUTPUT -p udp --dport 5353 -j ACCEPT
$ iptables -A INPUT -p udp --sport 9955 -j ACCEPT
根据这些规则,设备在物联网浏览器中被成功发现。
但是当访问设备时(例如获取完整的数据),TCP通信开始。这不是在某个港口。端口似乎是随机的。当(重新)启动aboutservice时,nmap显示如下端口。
46368/TCP打开未知,或
52739/TCP打开未知
如何确定端口?如何强制Alljoyn框架将TCP通信固定到某个端口或至少小的端口范围,例如41000-41100?或者有没有其他方法来配置防火墙,以使AllJoyn通信不被阻止?
最佳答案
通常alljoyn框架使用udp进行发现,使用tcp进行直接通信。
威尔科恩(注册)港口是;
端口号9956:IANA为Alljoyn分配的UDP多播端口
端口号5353:IANA为MDN分配的UDP多播端口
当设备发现彼此时,TCP通信在随机的临时端口上开始。此实现是一个与目标相关的代码,您可以检查目标的源代码。
关于linux - Linux防火墙后面的Alljoyn服务(iptables),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36468628/