IP로 MAC address 알아내기 ...
글쓴이: 서지훈 / 작성시간: 목, 2005/03/24 - 11:43오전
int get_ip_mac(const char *ipaddr, char *arp) { struct hostent *hp; struct sockaddr_in *sin; struct arpreq ar; unsigned char *ptr; char *p; static char addr[32]; int s, err; LOG_PRINT("## STEP-1 ...\n"); strncpy(addr, ipaddr, 32); /* ** setup buffer */ bzero((caddr_t)&ar, sizeof(ar)); ar.arp_pa.sa_family = AF_INET; sin = (struct sockaddr_in *)&ar.arp_pa; sin->sin_family = AF_INET; /* ** convert address to binary */ if ((sin->sin_addr.s_addr = inet_addr(addr)) < 0) return -1; memcpy (&ar.arp_pa, &sin, sizeof(ar.arp_pa)); LOG_PRINT("## STEP-2 ...\n"); /* ** get a socket and then collect ARP entry */ if((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) return -1; LOG_PRINT("## STEP-3 ...\n"); err = ioctl(s, SIOCGARP, (caddr_t)&ar); close(s); if (err < 0) return -1; LOG_PRINT("## STEP-4 ...\n"); /* ** we may have an address. Is it complete ? */ if (!(ar.arp_flags & ATF_COM)) return -1; LOG_PRINT("## STEP-5 ...\n"); /* ** convert to hex string */ ptr = (unsigned char *)ar.arp_ha.sa_data; sprintf(arp, "%02x%02x%02x%02x%02x%02x", ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5]); /* ** try for MAC address match */ //return (strcasecmp(p, arp) == 0); return 0; }
위 소스를 이용해서 구현을 하면 [STEP-3]까지만 진행 된 후...
ioctl()부분에서 EPFNOSUPPORT (Protocol family not supported)이 에러로 빠져나오게 됩니다.
당체 무어가 잘못 된건지 알 수가 없군요.
다른 여러 MAC address를 얻어 오는 부분을 봐도 대략 이정도 인데... 자꾸만 에러가 나는 군요.
여기에 관심 있으신분 보시고 조언 좀 부탁 드립니다.
그럼... 좋은 오후들 되세요.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
Forums:
ARP..
AF_INET 이 아니라...
AF_PACKET 아닌가요...?
#define AF_INET 2 /* Internet IP Protocol */
#define AF_AX25 3 /* Amateur Radio AX.25 */
#define AF_IPX 4 /* Novell IPX */
#define AF_APPLETALK 5 /* AppleTalk DDP */
#define AF_NETROM 6 /* Amateur Radio NET/ROM */
#define AF_BRIDGE 7 /* Multiprotocol bridge */
#define AF_ATMPVC 8 /* ATM PVCs */
#define AF_X25 9 /* Reserved for X.25 project */
#define AF_INET6 10 /* IP version 6 */
#define AF_ROSE 11 /* Amateur Radio X.25 PLP */
#define AF_DECnet 12 /* Reserved for DECnet project */
#define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/
#define AF_SECURITY 14 /* Security callback pseudo AF */
#define AF_KEY 15 /* PF_KEY key management API */
#define AF_NETLINK 16
#define AF_ROUTE AF_NETLINK /* Alias to emulate 4.4BSD */
#define AF_PACKET 17 /* Packet family */
<linux/socket.h>
INET은...ip layer 지원이고..
동일 레이어의 ARP사용하시려면 AF_PACKET을 사용하는걸로
알고 있습니다.
AF_PACKET 이걸루 해도 안되는군요.음...혹시 가지고 계신
AF_PACKET 이걸루 해도 안되는군요.
음...
혹시 가지고 계신 소스중에 한방에 되는 것 가지신분 안계신가요?
만약 그 소스로도 안된다면, 내부의 뭔가가 없거나 설정 문제 일지도?
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
답변
UNP 뒤쪽에 나오는 RAW socket 생성해서 사용하셔야 할거 같아서
찾아 보니 아래 소스가 보이네요.
소켓 생성에
위같이 raw socket생성 하시고 arp 부분 구성하셔서 inject하시면 될거 같네요..
ps. 아래 소스 그냥 이렇게 올려도 되는지 모르겠네요..
이 프로그램을 어떻게 사용해야 해당 IP의 MAC address를 알
이 프로그램을 어떻게 사용해야 해당 IP의 MAC address를 알 수가 있나요?
컴파일은 문제 없이 되는데 기능이 좀 ㅡㅡㅋ
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
[quote="서지훈"]이 프로그램을 어떻게 사용해야 해당 IP의 MA
전 이런방법을 이용했는데요 ...
http://kkanari.egloos.com/
댓글 달기