2010-08-17 2 views
1

Q1 - 라이브러리에서 DNS 요청/응답을 캡처 할 수 있습니까?PCap.Net을 사용하여 DNS 응답 캡처?

Q2 - 그렇다면 일단 패킷이 있으면 DNS 응답에서 필드를 추출 할 수있는 방법을 보여주는 샘플 코드가 있습니까? 특히 에서 주어진 DNS 이름에 대해 DNS가 확인한 IP 주소는 특히 입니다.

+0

http://pcapdotnet.codeplex.com/Thread/View.aspx?ThreadId=223803 – brickner

+0

의 토론을 참조하십시오. DNS 구문 분석기가 SharpPcap 용으로 개발 중입니다. 모든 유즈 케이스에 대해 질문/답변을 동적으로 파싱하면 꽤 털이 나올 수 있지만 가까운 미래에 todo 목록에 포함됩니다. –

+0

Evan - 고대 스레드의 부활을 유감스럽게 생각하지만 SharpPcap의 DNS 파서가 완성 되었습니까? SharpPcap/Packet.Net을 사용하여 DNS 요청 및 응답 패킷을 구문 분석하려고하지만 최신 다운로드 (또는 웹)에서이를 찾지 못했습니다. 감사! –

답변

2

예, 가능합니다.

  1. 는 IP 헤더
  2. 를 추출 이더넷 헤더
  3. 를 추출 :

    샘플 코드는 본질적으로

    ...하지만, 긴 측면에 약간의 것, 당신은 필요 UDP 헤더 추출 [패킷이 단편화되지 않았거나 TCP를 사용한다고 가정]

  4. DNS 페이로드 추출

다음 RFC 1035에 주어진 매우 철저한 설명에 따라 나머지 패킷을 처리합니다. 실제로

즉 :

  1. 이 요청을 무시 - 당신이 필요로하는 모든 정보는 응답에 (QR == 1)
  2. RCODE == 0 확인하고 찾을 수있는 질문 섹션에서 ANCOUNT > 0
  3. 모습입니다 질문 된 이름
  4. 의 답변을 찾으십시오. 답변 (duh!) 섹션

더 복잡한 문제를 해결하려면 DNS 레이블 (일련 번호 <count><data...> 필드)을 처리해야하며 압축 된 레이블도 처리해야합니다!

소리가 심하지 만 실제로는 인 것이므로 하드입니다. 나는이 모든 것을 수행하는 C++ 코드를 가지고 있으며 그다지 길지는 않지만 그것을 릴리스 할 수는 없다.

+0

우수 - 감사합니다 Alnitak, 내가 할 수만 있다면 오늘 갈께. – Greg

+0

Alnitak - UDP 패킷을 받겠다.하지만 PcapDotNet.Packets.Transport에서 어떻게 깨지는지 잘 모르겠다. .UdpDatagram 개체 수준을 추가로? 다음은 VS2010 postimage.org/image.php?v=aV7un3J에서 볼 수있는 스냅 샷입니다. 예를 들어 "((packet.Ethernet.IpV4.Udp) .Payload) .Buffer"값을 수동으로 구문 분석한다고 가정합니까? – Greg

+0

nb : 내 영국식 철자법에 잘못된 편집이 되돌아 왔습니다 ... – Alnitak