Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

mac адрес

2.0K
04 июня 2005 года
v0id
31 / / 08.04.2003
может быть дурацкий вопрос, но просто срочно надо.
Прога слушает порт, при коннекте на него нужно узнать ip и mac присоеденившейся машины. Подкиньте мысль plzz.
3.3K
05 июня 2005 года
GENA_DJ
123 / / 08.03.2005
Цитата:
Originally posted by v0id
может быть дурацкий вопрос, но просто срочно надо.
Прога слушает порт, при коннекте на него нужно узнать ip и mac присоеденившейся машины. Подкиньте мысль plzz.


Может быть это похоже на стрельбу из пушки по воробьям (в том смысле, что есть более простые решения), но первое, что пришло в голову: http://www.winpcap.org/

2
06 июня 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by v0id
может быть дурацкий вопрос, но просто срочно надо.
Прога слушает порт, при коннекте на него нужно узнать ip и mac присоеденившейся машины. Подкиньте мысль plzz.


учим матчасть лучше :) на стороне для приема соединения служит системный вызов

int accept (SOCKET sock, struct sockaddr *remote_addr, int *remote_addr_len)

параметр remote_addr - указывает на структуру sockaddr
(см. WINSOCK2.H)

 
Код:
struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};

из которой и извлекается адрес удаленного хоста.
MAC - извлекается из ARP таблицы собственного хоста. как это сделать программно - не знаю.
2.0K
07 июня 2005 года
v0id
31 / / 08.04.2003
спасибо и на этом..
3.3K
07 июня 2005 года
GENA_DJ
123 / / 08.03.2005
Цитата:
Originally posted by squirL
учим матчасть лучше :) на стороне для приема соединения служит системный вызов

int accept (SOCKET sock, struct sockaddr *remote_addr, int *remote_addr_len)

параметр remote_addr - указывает на структуру sockaddr
(см. WINSOCK2.H)
 
Код:
struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};

из которой и извлекается адрес удаленного хоста.
MAC - извлекается из ARP таблицы собственного хоста. как это сделать программно - не знаю.


Данный способ требует установления соединения. Если требуется отфильтровать пользователей без такового, например по mac или ip, он непригоден.
При этом любой удаленный сканер портов найдет ваш порт.
Очень нитересно, какие еще есть способы, кто какие знает?

2
07 июня 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by GENA_DJ
Данный способ требует установления соединения. Если требуется отфильтровать пользователей без такового, например по mac или ip, он непригоден.
При этом любой удаленный сканер портов найдет ваш порт.
Очень нитересно, какие еще есть способы, кто какие знает?


вы читаете внимательно?

Цитата:
Прога слушает порт, при коннекте на него нужно узнать ip и mac присоеденившейся машины

2.0K
07 июня 2005 года
v0id
31 / / 08.04.2003
Цитата:
Originally posted by squirL
учим матчасть лучше :) на стороне для приема соединения служит системный вызов

int accept (SOCKET sock, struct sockaddr *remote_addr, int *remote_addr_len)

параметр remote_addr - указывает на структуру sockaddr
(см. WINSOCK2.H)
 
Код:
struct sockaddr_in {
        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.

2
07 июня 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by v0id
но 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));

не позволяют религиозные убеждения?
2.0K
07 июня 2005 года
v0id
31 / / 08.04.2003
thаnxх, получилось.. сам сразу не догадался..
2
07 июня 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by v0id
thаnxх, получилось.. сам сразу не догадался..


кстати, а пишешь под винды? под никсами можно через ioctl к ARP таблице достучаться

2.0K
07 июня 2005 года
v0id
31 / / 08.04.2003
Цитата:
Originally posted by squirL
кстати, а пишешь под винды? под никсами можно через ioctl к ARP таблице достучаться



ага, под винды.. Полистал СДК нашёл

 
Код:
DWORD SendARP(
  IPAddr DestIP,
  IPAddr SrcIP,
  PULONG pMacAddr,
  PULONG PhyAddrLen
);

и всё получилось :)
3.3K
07 июня 2005 года
GENA_DJ
123 / / 08.03.2005
Цитата:
Originally posted by squirL
вы читаете внимательно?


Да, что - то я глюканул.
А есть какие - нибудь идеи, как с минимальными затратами получить mac и ip без установления соединения?

2.0K
07 июня 2005 года
v0id
31 / / 08.04.2003
Цитата:
Originally posted by GENA_DJ
Да, что - то я глюканул.
А есть какие - нибудь идеи, как с минимальными затратами получить mac и ip без установления соединения?



можно взять какой-нибудь open source фаирволл типа ipfw или iptables и посмотреть как риализовано...
с минимальными затратами думаю не получится, надо будет програмиировать на сетевом уровне протокола.. хотя это имхо...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог