[질문] 임의의 network layer에서 특정 ip에 대한 arp cache 값 읽어오는 방법
글쓴이: skjean / 작성시간: 금, 2006/01/13 - 4:07오후
제목 대로입니다.
임의의 network layer에서 특정 ip에 대한 MAC address를
읽어오고 싶은데요.. 이경우 커널의 어떤 함수를 호출해야
하는지 알고 싶습니다.
예를 들어, dev_queue_xmit()을 호출하기 직전에 이전 arp에
의해서 얻어온 destination MAC을 바꾸고 싶은거죠..
이때 arp table을 query하는 dest IP address는 원래 IP
packet의 dest IP address가 아니고, arp cache에 있는 다른 IP 입니다.
결국은 특정 dest IP "A"에 대해서 MAC "A"가 아닌 MAC "B"가
붙어 나가게 하고 싶은 것입니다. (물론 MAC "B"는 ARP Cache에
있고, 이는 IP "B"에 대한 MAC 입니다.)
어떤 커널 함수를 어떤 파라미터를 불러야 할지 한 수
부탁드립니다.
감사합니다. ^^
Forums:
UNP 442page를 참고하세요. ^^
UNP 442page를 참고하세요. ^^
----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------
net/ipv4/arp.c에 있는 두 가지 함수를 참조하실 수 있습니다.
net/ipv4/arp.c에 있는 두 가지 함수를 참조하실 수 있습니다.
static int arp_req_get(struct arpreq *r, struct net_device *dev)
: ioctl(SIOCGARP) 호출하면 불리는 함수입니다.
int arp_find(unsigned char *haddr, struct sk_buff *skb)
: 내보낼 sk_buff 구조체의 데이터를 이용해서 알아낸 주소를 haddr에 기록하는 함수입니다.
캐시 최근 사용 시각 갱신 등을 신경쓰지 않는다면 대략 다음 루틴 정도로 되지 않을까 싶습니다.
2.6.6 소스를 기준으로 했습니다.
$PWD `date`
ip_route_output()과 arp_find()를 이용해서 해결했습
ip_route_output()과 arp_find()를 이용해서 해결했습니다.
그런데, UNP가 무엇인가요?
dev_queue_xmit() 이전에 ip_route_output(&rt, ... )를 호출하여
rt->rt_gateway 값을 얻어오고 이를 이용하여 arp_find()를 호출하면
arp cache에 있는 MAC을 부가하여 전송하더라구요.. ^^;;
물론 이때 rt의 인자는 제가 원하는 IP를 부가했구요..
답변에 감사드립니다. 많은 도움 되었습니다. ^^
좋은 하루 되셔요~~~
[quote="skjean"]그런데, UNP가 무엇인가요?[/quote]
책 이름입니다. UNIX NETWORK PROGRAMMING (STEVENS)
======================
BLOG : http://superkkt.com
댓글 달기