2012-09-24 7 views
1

저는 회사의 새로운 제품에 대한 새로운 테스트 장비를 프로그래밍하고 있습니다.C# 간단한 DHCP 서버, DNS 요청?

테스트 중 하나는 이더넷 테스팅이고 나는 이와 같이 테스트 할 것이라고합니다.

  1. 일단 제품이 이더넷을 통해 연결되면 DHCP 프로토콜을 사용하여 IP 주소를 요청합니다.
  2. MAC 주소를 캡처하고 확인합니다.
  3. IP 주소가 제품에 부여됩니다.
  4. 이제 제품이 "something.something.something.se"호스트 이름의 IP 주소를 요청합니다.
  5. 호스트 이름을 확인하고 확인해야합니다.
  6. DNS 서버가 호스트 이름에 대한 IP 주소를 다시 보냅니다.
  7. 그러면 제품이 주어진 IP 주소로 TCP 연결을합니다.

제 문제는 제품에서 DHCP 검색 메시지를 수신하고 응답하는 것입니다. 그런 다음 IP 주소에 대한 DHCP 요청 메시지를 수신합니다 (1 단계). 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); 
} 

처럼 어떤 생각을 내가 다시 4 단계에 대한 응답을하지 왜?

EDIT DNS로 전송되는 IP 주소를 확인한 결과 192.168.0.1 (0.0.0.0)으로 변경되었지만 변경 사항이 없습니다. 내가 말했듯이 제품에 IP 주소를 알 수 있기 때문에 핑을 할 수는 있지만 DNS 주소에 문제가있는 것으로 보입니다. 제품에 빨간색 표시등이 깜박이면 DNS 요청이 실패했음을 알리는 것으로 확인되었습니다.

+3

프로그래밍 질문이 여기에 표시되지 않습니다. DHCP 코드가 분명히 IP를 반환하고 장치가이를 사용하고 있습니다. 나머지는 단지 DNS 결의안입니다. DHCP 응답으로 DNS 서버를 다시 보냅니 까? – Joe

+0

미안 나는 점심 먹으러 가기 전에 서두르려고했다. 아, DNS 서버가 DHCP 응답으로 들어가야합니까? 나는 RFC 문서 중 일부를 살펴 보았지만 IP 주소 요청에 대한 응답으로 DNS 서버를 보내는 것에 대해서는 아무것도 보지 못했습니다. – Gaz83

+0

SteenT에 대한 내 답변보기 – Gaz83

답변

0

모든 문제를 정확히 이해했다면 모든 단계를 완전히 테스트하려면 DHCP 서버 (DNS 서버)와 제품이 연결되는 서비스를 조롱해야합니다. 에.

MAC 주소 캡처에 대한 부분을 테스트해서는 안되며 테스트중인 제품의 일부가 아닌 것으로 판단됩니다.

그래서 제품이 DHCP에서 IP 주소를 요청하면 제품에 가짜 DNS 서버의 IP 번호도 할당해야합니다. 그런 다음 DNS 서버 (사용자 코드)는 호스트 이름에 대한 DNS 요청을 수행 할 때 제품에 IP를 전달하여 가짜 서비스를 제공해야합니다. 마지막으로 더 많은 코드가 제품에서 연결 요청을 캡처 할 준비가되었습니다.

그러면 모든 단계를 테스트 할 수 있습니다.

+0

코드를 확인했는데 보내던 DNS 주소는 0.0.0.0입니다. 방금 192.168.0.1 (테스트 PC의 IP 주소)로 변경했습니다. IP 주소를 부여한 후에도 제품에서 더 이상 응답을받지 못합니다. – Gaz83

+0

그리고 53 번 포트 (tcp/udp)를 듣고 있는데, 이것이 바로 DNS 통신이 이루어지는 곳입니까? –

+0

포트 53에 대해 몰랐습니다. 코드를 수정하여 IP 주소를 보내면 UdpClient를 닫고 새 포트를 만들어 포트 53에서 수신 대기하도록합니다. UdpClient 호스트 = 새 UdpClient(); 호스트 이름. host.Client.Bind (새 IPEndPoint (IPAddress.Parse ("192.168.0.1"), 53)); 아직 응답 없음 – Gaz83