【发布时间】:2013-01-31 18:42:08
【问题描述】:
我正在尝试从 DSL 调制解调器发送并使用 UDP 协议在端口 137 上接收的广播数据包中获取 IP 地址。当存在连接时,我能够读取 IP 地址。
但是,在未识别的网络状态下,当我的调制解调器配置为 DHCP,并且允许特定范围的 IP 并且我的机器上的设置是自动检测时:
我在阅读广播消息时获得了机器的默认本地 IP 地址。那将从 169 开始。
注意:我正在重新启动调制解调器以接收广播消息。
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 137);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
int iLoopCount=0;
while (iLoopCount <= 10000)
{
Console.WriteLine("Ready to receive…");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.Default.GetString(data, 0, recv);
Console.WriteLine("{1}: from: {0}",((IPEndPoint)ep).Address.ToString(),DateTime.Now.ToString());
iLoopCount++;
// Console.WriteLine(sock.RemoteEndPoint.ToString());
}
sock.Close();
Console.Read();
【问题讨论】:
-
您是说当您的 DHCP 服务器重新启动或处于非运行状态时您无法检索 IP 地址?如果您的主机配置为自动检索 IP 地址,我认为您需要重新考虑您的流程,因为这就是重点。除此之外,我不确定您遇到的问题是什么。
-
当 DHCP 服务器重新启动时,我可以在 Wireshark 和网络监视器上看到源 IP 地址为 192.168.1.252(调制解调器 IP 地址)的 Nbtns 数据包。我正在尝试使用放置在 137 端口的 c# UDP 侦听器从相同的数据包中获取源 IpAddress。 ip 地址被检索为 169.254.x.x 而不是 192.168.1.252。
-
我仍然不确定您的问题是什么?您是说在您的 DHCP 服务器重新联机后,您无法从本地主机中提取 IP 吗?如果您从“DHCP 服务器”ping 一个 IP,您可能自己解析了一个 IP 地址。编辑:我在你编辑之前提交了这个,忽略
-
您是否有理由需要嗅探 NetBIOS 数据包来执行此操作,或者仅在调制解调器/dhcp/服务器联机时检索它就足够了?
-
我得到了答案,能够通过嗅探数据包并提取标头的源 IP 来获取具有 DHCP 设置的集线器的 IPAddress。 codeproject.com/Articles/17031/A-Network-Sniffer-in-C
标签: c# sockets udp modem packet-capture