防火墙开启,UDP的广播回调接收不到?

连接的设备和电脑 不在同一网段下(比如设备是192.168.10.100, 本地IP是192.168.1.10),防火墙开启后,UDP的广播回调收不到,关闭就可以接收到;
使用Wireshark抓包是否开启防火墙都是正常的(发送广播和接收都是正常的);
我看到有些软件是可以做的开启防火墙也可以正常的;
我使用的是electron和nodeJS
请问下这种情况下怎么处理可以不开启防火墙也能正常获取到广播返回的数据;

const dgram = require('dgram')
  const client = dgram.createSocket('udp4')

  const broadcastAddress = '255.255.255.255'
  const port = 7000

  client.on('error', (err) => {
    console.log(`client error:\n${err.stack}`)
    client.close()
  })

  client.on('message', (msg, rinfo) => {
    // 防火墙开启后接收不到数据
    console.log(`${msg}`, rinfo)
    client.close()
  })

  // 设置套接字选项以允许广播
  client.bind(
    {
      address: localAddress,
      exclusive: false // 如果设置为true,则不允许其他套接字绑定到相同的地址和端口组合
    },
    function () {
      const message = Buffer.from(JSON.stringify({ device: 'mesh', method: 'discover' }))
      client.setBroadcast(true)
      client.send(message, 0, message.length, port, broadcastAddress, function (err) {
        if (err) {
          return console.log('Error sending broadcast:', err)
        }
      })
    }
  )
阅读 1.1k
avatarAI BotBETA

在防火墙开启时,UDP广播数据可能因安全策略被阻止。防火墙通常默认阻止未明确允许的入站广播流量,因为这类流量可能用于未经授权的扫描或网络攻击。然而,您可以通过配置防火墙规则来允许特定的UDP广播流量通过。

解决方案

  1. 配置防火墙规则
    您需要在防火墙中配置规则,允许UDP端口7000上的入站广播流量。这可以通过防火墙的管理界面或使用命令行工具完成,具体取决于您使用的操作系统和防火墙软件。

    对于Windows系统,您可能需要使用“高级安全Windows防火墙”来创建入站规则,允许UDP协议、特定端口(如7000)和所有源地址(因为广播地址是255.255.255.255,但实际来源可能来自不同IP)。

    对于Linux系统,您可以使用iptablesfirewalld等工具来添加类似的规则。例如,使用iptables添加规则的命令可能类似于:

    sudo iptables -A INPUT -p udp --dport 7000 -j ACCEPT

注意:这仅是一个基本示例,实际规则可能需要更详细的配置,以确保仅允许来自特定网络或接口的广播流量。

  1. 检查路由器和交换机设置
    有时,路由器或交换机也可能配置为阻止或限制广播流量。确保这些设备没有设置会阻止您的广播数据包的策略。
  2. 使用Wireshark进行调试
    继续使用Wireshark可以帮助您确认数据包是否被防火墙或网络设备拦截。通过监控网络接口,您可以看到数据包是否离开您的计算机并尝试到达目标,以及它们是否被其他设备或软件响应。
  3. 代码审查
    您的Node.js代码看起来基本正确,但请确保localAddress变量已正确定义并设置为本地网络接口的有效IP地址。此外,检查是否有其他网络配置(如子网掩码)可能影响广播的发送和接收。
  4. 软件和网络兼容性
    您提到有些软件可以在防火墙开启时正常工作。这可能是因为这些软件已经配置了必要的防火墙规则,或者它们使用了不同的通信机制(如TCP而非UDP,或不同的端口)。了解这些软件的实现可能有助于您找到解决问题的方法。
  5. 使用VPN或网络桥接
    如果设备和电脑不在同一网段,并且您无法修改防火墙规则或路由器设置,您可能需要考虑使用VPN(虚拟专用网络)或网络桥接技术来将设备置于与电脑相同的网络环境中。

通过上述步骤,您应该能够解决在防火墙开启时无法接收UDP广播数据的问题。如果问题仍然存在,请考虑咨询网络管理员或寻求专业的技术支持。

1 个回答

可以尝试为防火墙开放7000端口
如果是linux系统sudo iptables -I INPUT -p udp --dport 7000 -j ACCEPT,如果是windows系统,在控制面板\系统和安全\Windows Defender 防火墙\高级设置中新建入站规则,添加UDP端口7000;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏