c - 回复 udp 数据包被阻止

标签 c udp firewall

我正在编写一个 C 程序来搜索本地网络上的 smb 共享并安装它们。 为了获取找到的 smb 服务器的主机名,我向服务器发送了 udp nbns 数据包。 数据包正确,服务器回复。 我正在使用wireshark来检查这一点。 我将我发送的数据包与 nbstat 发送的数据包进行了比较,并且还比较了服务器返回的数据包。 除了 id 和校验和之外,它们是相同的。

当我使用 nbstat 发出请求时,回复数据包已正确收到,但对我自己的数据包的回复可能被防火墙阻止。 收到服务器的回复后,客户端计算机向服务器发送 icmp“目的地不可达(端口不可达)”消息。 我怀疑是我的防火墙发送了它。

这是wireshark的输出

没有。时间源目的地协议(protocol)长度信息
12 29.870065 192.168.1.245 192.168.1.21 NBNS 92 名称查询 NBSTAT *<00><00.......
13 29.870494 192.168.1.21 192.168.1.245 NBNS 253 名称查询响应 NBSTAT
14 29.870559 192.168.1.245 192.168.1.21 ICMP 281 目的地无法到达(端口无法到达)

我应该怎么做才能让回复通过?

最佳答案

您的程序是否监听 UDP 端口 137 以接收服务器回复? 如果不是,那就解释了为什么您的主机发送 ICMP 数据包端口不可达。

如果您监听端口 137,请尝试在发送 NBNS 查询时将源端口配置为端口 137。这样防火墙现在应该让数据包进入此端口。

关于c - 回复 udp 数据包被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16188674/

相关文章:

c - __modti3 做什么?

C - 将 char* 转换为 unsigned char 数组

c - 降序堆排序

c# - Querystring 中的 Guid 正在以某种方式进行转换

MySQL 在没有本地连接的情况下无法在本地主机上运行

c++ - 如何使存储数组的二进制搜索稳定

javascript - 如何使用javascript将UDP数据包发送到本地网络广播

networking - 用于对大数据传输进行 udp 和 tcp 性能基准测试的实用程序

windows - 使用 Windows 过滤平台按进程 ID 阻止流量

ios - 将UDP请求发送到255.255.255.255并在iOS中等待回复