Tôi đang cố gắng để có được các mục ARP trên iPad của tôi như here.Bắt bảng ARP trên iPhone/iPad
Khi biên dịch mã chạy trên iPad của tôi (do đó không phải trình mô phỏng) Tôi đang nhận được thông báo lỗi tiêu đề bị thiếu. Bạn có thể giải quyết chúng bằng cách sao chép các tệp tiêu đề vào dự án của bạn tại địa phương như được đề cập trong post này.
Vấn đề nằm ở dòng
SDL = (struct sockaddr_dl *) (sin + 1);
trong đoạn mã này:
-(NSString*) ip2mac: (char*) ip
{
int expire_time, flags, export_only, doing_proxy, found_entry;
NSString *mAddr = nil;
u_long addr = inet_addr(ip);
int mib[6];
size_t needed;
char *host, *lim, *buf, *next;
struct rt_msghdr *rtm;
struct sockaddr_inarp *sin;
struct sockaddr_dl *sdl;
extern int h_errno;
struct hostent *hp;
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0;
mib[3] = AF_INET;
mib[4] = NET_RT_FLAGS;
mib[5] = RTF_LLINFO;
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
err(1, "route-sysctl-estimate");
if ((buf = malloc(needed)) == NULL)
err(1, "malloc");
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
err(1, "actual retrieval of routing table");
lim = buf + needed;
for (next = buf; next < lim; next += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)next;
sin = (struct sockaddr_inarp *)(rtm + 1);
sdl = (struct sockaddr_dl *)(sin + 1);
if (addr) {
if (addr != sin->sin_addr.s_addr)
continue;
found_entry = 1;
}
if (nflag == 0)
hp = gethostbyaddr((caddr_t)&(sin->sin_addr),
sizeof sin->sin_addr, AF_INET);
else
hp = 0;
if (hp)
host = hp->h_name;
else {
host = "?";
if (h_errno == TRY_AGAIN)
nflag = 1;
}
if (sdl->sdl_alen) {
u_char *cp = LLADDR(sdl);
mAddr = [NSString stringWithFormat:@"%x:%x:%x:%x:%x:%x", cp[0], cp[1], cp[2], cp[3], cp[4], cp[5]];
// ether_print((u_char *)LLADDR(sdl));
}
else
mAddr = nil;
}
if (found_entry == 0) {
return nil;
} else {
return mAddr;
}
}
Nó cung cấp cho các thông báo lỗi sau:
số học trên con trỏ đến loại không đầy đủ 'struct sockaddr_inarp *'
Khi bạn biên dịch mã cho tất cả mọi thứ mô phỏng iPad chạy tốt.
Có ai có ý tưởng cách giải quyết vấn đề này không? Câu hỏi tương tự (nhưng chưa được giải quyết) được yêu cầu here.
hi @Richard: - Tôi nhận được thông báo không xác định, tôi cần bao gồm/nhập cho số – Bonnie
@Richard: Tôi mới dùng 'target-C', tôi muốn lấy 'địa chỉ ip' của ứng dụng khách đã kết nối với 'hotspot'. Và tôi tìm thấy 'ARP.c' và' ARP.h'. Nhưng làm thế nào để sử dụng nó để có được 'địa chỉ IP' trong' bảng ARP'? – Martin
Xin lỗi, Bạn đặt mã trong tệp .m và biên dịch trực tiếp? – Wun