arp packet 을 구성해서sendto로 전송이 가능한가요?

ktkmyfeeling의 이미지

책과 인터넷을 보고서 arp packet을 구성하여 sendto로 하여 packet 값을 전송하려고 합니다.

socket을 사용하고 있구요

socket(PF_INET, SOCK_RAW, IPPROTO_IP) 식으로 소켓을 구성하였습니다.

packet 값 역시

arphdr과 ether_arp에 자료를 저장하였구요

setsockopt(sd, IPPROTO_IP, IP_HDRINCL, &sasend, sizeof(sasend));

식으로 setsockopt를 지정하였습니다.

물론 setsockopt(sd, SOL_SOCKET, SO_BROADCAST, &sasend, sizeof(sasend));
요러게도 해봤구요.

linux가 안돼어서 unix로만 짜려구 하는데 자꾸 헛다리 짚는 듯한 기분도 들고 해서

이렇게 글 올립니다.

기본적으로 예를 든 소스는 icmp 를 이용한 ping 소스 예제에서
icmp 부분을 없에고 arphdr과 ether_arp에 값을 저장하고 sendto 하였습니다.
wireshark로 값을 확인 하고 싶은데 malformed packet 이라고 뜨네요

아직 유닉스랑 network쪽은 초보라 조언이 필요합니다.

도와 주시면 감사합니다.

gilgil의 이미지

IPPROTO_IP로 소켓을 생성하여 데이터를 송신하면 IP 패킷이 송신되지, ARP 패킷이 송신되지는 않습니다.

보내어진 패킷을 Wireshark로 잡아서 봤을 때 Ethernet Type이 ARP(0x0806)으로 보일 겁니다(IP패킷은 Ethernet Type이 0x0800이어야 함).

raw level socket 을 사용하지 말고, pcap을 이용해서 프로그래밍을 해 보세요.