我正在编写一个C程序来搜索本地网络上的smb共享并挂载它们。 为了获得smb服务器的主机名,我发送了一个udp nbns数据包给服务器。 数据包是正确的,服务器回复。 我正在使用wireshark检查这个。 我将发送的数据包与nbstat发送的数据包进行了比较,并且还比较了服务器返回的数据包。 对于id和校验和,他们是相同的。
当我使用nbstat执行请求时,收到的回复数据包是正确的,但是对我自己的数据包的回复可能会被防火墙阻止。 在从服务器接收到回复之后,客户端机器向服务器发送icmp“Destination unreachable(Port unreachable)”消息。 我怀疑防火墙发送它。
这是来自wireshark的输出
没有。时间源目标协议长度信息
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目的地不可达(端口不可达)
我该怎么办才能让回复通过?
答案 0 :(得分:1)
您的程序是否在UDP端口137上侦听以接收服务器回复? 如果没有,这就解释了为什么你的主机发送ICMP数据包端口无法访问。
如果您在端口137上侦听,请在将NBNS查询发送到端口137时尝试配置源端口。因此防火墙现在应该将数据包发送到此端口。