Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C简单DHCP服务器,DNS请求?_C#_Dhcp - Fatal编程技术网

C# C简单DHCP服务器,DNS请求?

C# C简单DHCP服务器,DNS请求?,c#,dhcp,C#,Dhcp,我正在为我公司的新产品设计一台新的测试设备 其中一个测试是以太网测试,我被告知将这样测试 一旦产品通过以太网连接,它将使用DHCP协议请求IP地址。 要捕获和验证MAC地址。 为产品提供了一个IP地址。 现在,产品请求主机名something.something.something.se的IP地址 必须检查并验证主机名。 DNS服务器发回主机名的IP地址。 然后,该产品将与给定的IP地址建立TCP连接。 我的问题是,我收到来自产品的DHCP发现消息,并作出响应。然后,我收到IP地址步骤1的DHC

我正在为我公司的新产品设计一台新的测试设备

其中一个测试是以太网测试,我被告知将这样测试

一旦产品通过以太网连接,它将使用DHCP协议请求IP地址。 要捕获和验证MAC地址。 为产品提供了一个IP地址。 现在,产品请求主机名something.something.something.se的IP地址 必须检查并验证主机名。 DNS服务器发回主机名的IP地址。 然后,该产品将与给定的IP地址建立TCP连接。 我的问题是,我收到来自产品的DHCP发现消息,并作出响应。然后,我收到IP地址步骤1的DHCP请求消息。我发回一个IP地址,然后我再也听不到来自该产品的消息

如果我在我提供的IP地址上PING产品,我会得到一个响应,这样我就知道产品已经收到并设置了它的IP地址

我使用一个UdpClient来进行通信,并且是这样设置的

IPEndPoint ProductEndPoint = new IPEndPoint(IPAddress.Any, 0);
UdpClient host = new UdpClient();
host.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
host.Client.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.1"), 67)); //192.168.0.1 is ip address of PC

for(int i = 0; i < 30; i++)
{
  if (host.Available > 0)
  {
    byte[] Data = host.Receive(ref ProductEndPoint);

    // Do something with the data
  }
  else
    Thread.Sleep(1000);
}
你知道为什么我在第四步没有得到回复吗

编辑
我已经检查了作为DNS发送的IP地址,并将其更改为192.168.0.1是0.0.0.0,但仍然没有更改。正如我所说,我知道产品得到了IP地址,因为我可以ping它,但它似乎与DNS地址有问题。我已经确认了这一点,因为该产品有一个闪烁的红灯,我被告知这意味着DNS请求失败。

如果我正确理解您的问题/问题,要完全测试所有步骤,您必须模拟您已经在做的DHCP服务器,我想是DNS服务器,最后是该产品连接到的服务

我猜您不应该测试MAC地址捕获和验证部分,这不是您正在测试的产品的一部分

因此,当产品从DHCP请求IP地址时,您应该确保产品也获得了一个假DNS服务器的IP号码。当DNS服务器对主机名执行DNS请求时,您的代码应该将另一个虚假服务的IP交给该产品。最后,您的一些代码已经准备好捕获产品的连接请求


然后您应该能够测试所有步骤。

我在这里没有看到编程问题:您的DHCP代码显然返回了一个IP,而设备正在使用它;剩下的只是DNS解析。您是否将DNS服务器与DHCP响应一起发送回?抱歉,我添加了这个问题,在我去吃午饭之前,我试图赶时间。啊,那么DNS服务器将进入DHCP响应?我浏览了一些RFC文档,但没有看到任何关于发送DNS服务器响应IP地址请求的内容。没有对SteenT的响应。我有点好奇,为什么您试图在代码中复制DHCP服务器和DNS服务器只是为了测试;为什么不设置一个测试DHCP和DNS服务器并完成它呢?测试设备运行在windows XP机器上,必须完全自动化。i、 e和操作员加载一个产品,按下一个按钮,它就离开了。我检查了我的代码,我发送的DNS地址是0.0.0.0。我刚刚将此更改为测试PC的192.168.0.1 ip地址。在提供ip地址后,我仍然没有收到产品的更多响应。您正在收听端口53 tcp/udp,这就是DNS通信发生的地方?我不知道端口53。我修改了我的代码,这样一旦我发送了IP地址,我就会关闭UdpClient并创建一个新的UdpClient来监听端口53,就像这样。UdpClient主机=新的UdpClient;host.Client.SetSocketOptionSocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true;host.Client.Bindnew-IPEndPointIPAddress.Parse192.168.0.1,53;仍然没有响应在TCP端口53上执行,我认为UDP端口53仅用于区域传输,或者可能是相反的方式。我尝试了这个,但什么也没有得到。-TcpListener tl=新的TcpListenernew-IPEndPointIPAddress.Parse192.168.0.1,53;tl.开始;-我一直在检查tl.Server.Available,看看那里是否有任何东西,但什么也没有得到。同时检查Pendin,结果总是错误的