mac адрес
Прога слушает порт, при коннекте на него нужно узнать ip и mac присоеденившейся машины. Подкиньте мысль plzz.
может быть дурацкий вопрос, но просто срочно надо.
Прога слушает порт, при коннекте на него нужно узнать ip и mac присоеденившейся машины. Подкиньте мысль plzz.
Может быть это похоже на стрельбу из пушки по воробьям (в том смысле, что есть более простые решения), но первое, что пришло в голову: http://www.winpcap.org/
может быть дурацкий вопрос, но просто срочно надо.
Прога слушает порт, при коннекте на него нужно узнать ip и mac присоеденившейся машины. Подкиньте мысль plzz.
учим матчасть лучше :) на стороне для приема соединения служит системный вызов
int accept (SOCKET sock, struct sockaddr *remote_addr, int *remote_addr_len)
параметр remote_addr - указывает на структуру sockaddr
(см. WINSOCK2.H)
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
из которой и извлекается адрес удаленного хоста.
MAC - извлекается из ARP таблицы собственного хоста. как это сделать программно - не знаю.
учим матчасть лучше :) на стороне для приема соединения служит системный вызов
int accept (SOCKET sock, struct sockaddr *remote_addr, int *remote_addr_len)
параметр remote_addr - указывает на структуру sockaddr
(см. WINSOCK2.H)
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
из которой и извлекается адрес удаленного хоста.
MAC - извлекается из ARP таблицы собственного хоста. как это сделать программно - не знаю.
Данный способ требует установления соединения. Если требуется отфильтровать пользователей без такового, например по mac или ip, он непригоден.
При этом любой удаленный сканер портов найдет ваш порт.
Очень нитересно, какие еще есть способы, кто какие знает?
Данный способ требует установления соединения. Если требуется отфильтровать пользователей без такового, например по mac или ip, он непригоден.
При этом любой удаленный сканер портов найдет ваш порт.
Очень нитересно, какие еще есть способы, кто какие знает?
вы читаете внимательно?
учим матчасть лучше :) на стороне для приема соединения служит системный вызов
int accept (SOCKET sock, struct sockaddr *remote_addr, int *remote_addr_len)
параметр remote_addr - указывает на структуру sockaddr
(см. WINSOCK2.H)
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
из которой и извлекается адрес удаленного хоста.
MAC - извлекается из ARP таблицы собственного хоста. как это сделать программно - не знаю.
но accept"у надо структуру sockaddr (а не sockaddr_in), а в ней нет in_addr. Только sa_data и sa_family.
но accept"у надо структуру sockaddr (а не sockaddr_in), а в ней нет in_addr. Только sa_data и sa_family.
а сделать
int peerlen = sizeof(peer);
accept (s, (struct sockaddr *) &peer, &peerlen);
...
...
printf ("%s\n", inet_ntoa(peer.sin_addr.s_addr));
не позволяют религиозные убеждения?
thаnxх, получилось.. сам сразу не догадался..
кстати, а пишешь под винды? под никсами можно через ioctl к ARP таблице достучаться
кстати, а пишешь под винды? под никсами можно через ioctl к ARP таблице достучаться
ага, под винды.. Полистал СДК нашёл
IPAddr DestIP,
IPAddr SrcIP,
PULONG pMacAddr,
PULONG PhyAddrLen
);
и всё получилось :)
вы читаете внимательно?
Да, что - то я глюканул.
А есть какие - нибудь идеи, как с минимальными затратами получить mac и ip без установления соединения?
Да, что - то я глюканул.
А есть какие - нибудь идеи, как с минимальными затратами получить mac и ip без установления соединения?
можно взять какой-нибудь open source фаирволл типа ipfw или iptables и посмотреть как риализовано...
с минимальными затратами думаю не получится, надо будет програмиировать на сетевом уровне протокола.. хотя это имхо...