RAW 소켓 프로그래밍 중 ARP 프로토콜에 대해.
** 여기다가 질문해도 되는 게 맞는지..... 염치불구하고 글을 올려봅니다.
질문의 요지를 말씀드리겠습니다.
먼저 개발하는 환경은 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 소켓쪽에 관련된 서적을 찾는것 조차도 힘들어서 글을 올려봅니다.
(위의 것들도 인터넷에서 기웃거려서 알아낸 것들이라.. 신빙성도 없네요)
한가지 더 부탁드리고 싶은 게 있는데.
혹시 RAW 관련 서적 아시는분은.. 추천 좀 부탁드립니다.
RAW는...
UNP에 raw packet에 대해 설명 나와있긴 한데, arp도 되나. ㅡ.ㅡa
man 7 raw
man 7 packet
참고하세요. 도움이 될련지 모르겠네요 ^^;
음...
UNP가 무엇을 말하는 것이지요??;;
처음 들어보는 거 같은데 ㅠㅠ;
UNP는...
Unix Network Programming...
감사합니다.
친절하시군요 ^^
패킷은 이상 없는 듯 하네요.
패킷을 분석해보면, 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
아. 그렇군요.
맞네요. PING으로 대상과 통신선로 확인한 후 다시 시도를 해보니
상대로부터 ARP REPLY가 오는군요~
정보 감사합니다.
저느 지금까지 DNS가 알려주는 줄 알았어요 ;-)
뭔가 착오가
뭔가 착오가 있으신것 같습니다.
ping 패킷을 날리려면...prefix 매칭을 먼저 하고 나서 같은 브로드캐스팅 도메인 내에 있는 단말이라면, arp cache를 뒤지고,,,arp cache에 없으면 arp request를 브로드 캐스팅 합니다.
즉, ping 응용이 제대로 동작하려면 arp 가 먼저 동작이 됩니다.
핑으로 확인 했더니 arp reply가 제대로 온다 라는 말씀은 착오가 있으신 듯 합니다.
음..그게 표현이 모호해서 그런거 같네요..
제가 쓴 글의 의미는;;
PING 으로.. 대상으로부터 응답이 오는지 사전작업을 해 본 후에. (통신선로를 확인해본 것이죠)
ARP REQUEST 테스트를 해본 것이었어요.
맨 처음에 시도했을때는 그 대상 컴퓨터 전원이 꺼져있는 상태여서.
아무리 REQUEST를 해도 응답이 없더라구요.
근데 다행히 도움의 글을 얻게 되어서,
서로 통신상태가 가능하게 만든 후에 재시도를 하니까
상대방으로부터 REPLY가 왔다는 것이지요 ^-^;
제가 RAW 소켓 공부삼아 해보는 것이라서...
그냥.. 단순한 테스트 였답니다 :-)
댓글 달기