RAW 소켓 프로그래밍 중 ARP 프로토콜에 대해.

ys11010의 이미지

** 여기다가 질문해도 되는 게 맞는지..... 염치불구하고 글을 올려봅니다.

질문의 요지를 말씀드리겠습니다.

먼저 개발하는 환경은 Visual Studio .NET 2003 과 Win Pcap 3.0 라이브러리를 사용하고,

RAW 소켓 프로그래밍 부분은 C언어로 구현하고 있습니다.

ARP 프로토콜을 이용해서 DNS서버에게 특정IP를 가진 대상의 MAC주소를 얻어오게 하는 ARP 패킷을 보냈는데

ETHEREAL 패킷스니퍼 프로그램으로 패킷을 분석해본 결과

패킷 송신은 올바르게 되는것 같은데 DNS서버로부터 응답이 없습니다.

다음 내용들은 패킷에 정보를 담은 배열의 정보입니다.

/* set destination mac address ( Broadcast )*/

packet[0]=0xFF;
packet[1]=0xFF;
packet[2]=0xFF;
packet[3]=0xFF;
packet[4]=0xFF;
packet[5]=0xFF;

/* set source mac address */

packet[6]=0x00;
packet[7]=0x11;
packet[8]=0x22;
packet[9]=0x33;
packet[10]=0x44;
packet[11]=0x55;

/* Ether-Type (ARP) */

packet[12]=0x08;
packet[13]=0x06;

/* Hardware Type (Ethernet)*/

packet[14]=0x00;
packet[15]=0x01;

/* Protocol Type (IP) */

packet[16]=0x08;
packet[17]=0x00;

/* Hardware Length */

packet[18]=0x06;

/* Protocol Length */

packet[19]=0x04;

/* Operation (request : 1, reply : 2) */

packet[20]=0x00;
packet[21]=0x01;

/* Sender Hardware Address */

packet[22]=0x00;
packet[23]=0x11;
packet[24]=0x22;
packet[25]=0x33;
packet[26]=0x44;
packet[27]=0x55;

/* Sender Protocol Address */

packet[28]=0xC0;
packet[29]=0xA8;
packet[30]=0x16;
packet[31]=0xE7;

/* Target Hardware Address ( Empty ) */

packet[32]=0x00;
packet[33]=0x00;
packet[34]=0x00;
packet[35]=0x00;
packet[36]=0x00;
packet[37]=0x00;

/* Target Protocol Address */

packet[38]=0xC0;
packet[39]=0xA8;
packet[40]=0x16;
packet[41]=0xE8;

/* Trailer */

packet[42]=0x00;
packet[43]=0x00;
packet[44]=0x00;
packet[45]=0x00;
packet[46]=0x00;
packet[47]=0x00;
packet[48]=0x00;
packet[49]=0x00;
packet[50]=0x00;
packet[51]=0x00;
packet[52]=0x00;
packet[53]=0x00;
packet[54]=0x00;
packet[55]=0x00;
packet[56]=0x00;
packet[57]=0x00;
packet[58]=0x00;
packet[59]=0x00;

여기까지입니다.

가급적이면 스스로 혼자 문제점을 찾아보려고 했으나 아직 지식이 너무 얕다보니

RAW 소켓쪽에 관련된 서적을 찾는것 조차도 힘들어서 글을 올려봅니다.

(위의 것들도 인터넷에서 기웃거려서 알아낸 것들이라.. 신빙성도 없네요)

ys11010의 이미지

혹시 RAW 관련 서적 아시는분은.. 추천 좀 부탁드립니다.

haze11의 이미지

UNP에 raw packet에 대해 설명 나와있긴 한데, arp도 되나. ㅡ.ㅡa
man 7 raw
man 7 packet
참고하세요. 도움이 될련지 모르겠네요 ^^;

ys11010의 이미지

UNP가 무엇을 말하는 것이지요??;;
처음 들어보는 거 같은데 ㅠㅠ;

haze11의 이미지

Unix Network Programming...

ys11010의 이미지

친절하시군요 ^^

haze11의 이미지

패킷을 분석해보면, h/w addr : 00:11:22:33:44:55 / IP addr : 192.168.22.231를 가지는 PC에서 192.168.22.232를 IP로 가지는 PC의 h/w addr를 요청하는 것입니다.
패킷에는 이상이 없는 것으로 보이고, ethereal에서 확인하셨다면 확실하겠죠.
다만 arp 요청에 의한 답이 없다면 해당 IP를 가지는 PC가 broadcast domain 안에 존재하지 않아서 그럴 수 있습니다.
ys11010님께서 만드신 프로그램으로 테스트하기 전에 먼저 ping같은 간단한 테스트를 통해서 해당 IP를 가지는 PC가 존재하는지 확인부터 하시기 바랍니다.

참고로 arp는 dns에게 묻는 것이 아니라 broadcast domain 안에 있는 네트웍 장치들에게 물어보는 겁니다. :)

arp : http://en.wikipedia.org/wiki/Address_Resolution_Protocol

ys11010의 이미지

맞네요. PING으로 대상과 통신선로 확인한 후 다시 시도를 해보니
상대로부터 ARP REPLY가 오는군요~
정보 감사합니다.
저느 지금까지 DNS가 알려주는 줄 알았어요 ;-)

swunk의 이미지

뭔가 착오가 있으신것 같습니다.
ping 패킷을 날리려면...prefix 매칭을 먼저 하고 나서 같은 브로드캐스팅 도메인 내에 있는 단말이라면, arp cache를 뒤지고,,,arp cache에 없으면 arp request를 브로드 캐스팅 합니다.

즉, ping 응용이 제대로 동작하려면 arp 가 먼저 동작이 됩니다.
핑으로 확인 했더니 arp reply가 제대로 온다 라는 말씀은 착오가 있으신 듯 합니다.

ys11010의 이미지

제가 쓴 글의 의미는;;
PING 으로.. 대상으로부터 응답이 오는지 사전작업을 해 본 후에. (통신선로를 확인해본 것이죠)
ARP REQUEST 테스트를 해본 것이었어요.

맨 처음에 시도했을때는 그 대상 컴퓨터 전원이 꺼져있는 상태여서.
아무리 REQUEST를 해도 응답이 없더라구요.
근데 다행히 도움의 글을 얻게 되어서,
서로 통신상태가 가능하게 만든 후에 재시도를 하니까
상대방으로부터 REPLY가 왔다는 것이지요 ^-^;

제가 RAW 소켓 공부삼아 해보는 것이라서...
그냥.. 단순한 테스트 였답니다 :-)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.