如何使用Node.js控制UDP数据包的源IP或端口

5
我正在开发一个与嵌入式设备通过SNMP协议交互的应用程序。为了方便测试,我使用Nodejs和snmpjs库编写了一个嵌入式设备模拟器。模拟器响应SNMP get/sets并向管理应用程序发送trap消息。trap消息由snmpjs库构建,但是使用Node的标准UDP套接字手动发送。
当模拟一个设备时,这个方法很有效,但是在模拟多个设备时遇到了问题。具体来说,管理应用程序通过分析携带trap的UDP数据包的源IP/port来识别SNMP trap的源设备。这排除了我同时模拟多个设备的可能性,而这是应用程序最常见的用例。
因此,我的问题是:是否有一种方法可以使用Nodejs控制/欺骗udp数据包的源IP或端口?或者,也许可以使用某种代理来实现所需的结果?
(注意:在单台机器上运行模拟器是严格要求的。另外,仅为每个模拟器提供唯一的IP/端口不足以满足要求,我必须能够预先知道它们的值,以便正确配置管理应用程序与它们进行交互。)

1
糟糕...解决方案很简单。我忽略了节点文档中关于udp套接字的send方法的这一行,"如果套接字之前没有通过调用bind绑定过,它将被分配一个随机端口号..." 我只需要先将套接字绑定到一个端口即可。我已经通过测试脚本验证了这一点。 - jared
我认为在这种情况下回答自己的问题是可以的。不是吗? - Jolta
我相信你是对的。最初24小时内我无法这样做,所以我发表了评论。为了清晰起见,我已将评论粘贴为答案。 - jared
1个回答

6
解决方案很简单。我忽略了节点文档中udp套接字send方法的这行说明,“如果套接字之前没有通过bind调用绑定过,它会被赋予一个随机端口号......”我只需要先将套接字绑定到一个端口上即可。我已经使用测试脚本验证了这一点。

但是这对IP欺骗无效,在Windows上至少会出现“EADDRNOTAVAIL”错误。 - Tomáš Zato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接