Форум: "Сети";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизКак на сервере определить MAC клиента? Найти похожие ветки
← →
MegaVolt © (2004-11-08 18:23) [0]Есть приложение сервер исспользуется TServerSocket. Можно ли узнать MAC подключившегося пользователя? IP прописан явно в RemotAddress может так же просто можно получить и MAC?
← →
MegaVolt © (2004-11-08 19:33) [1]Попробовал SendARP пишет сетевой запрос не поддерживается. 98 похоже не поддерживает :(
← →
Piter © (2004-11-08 20:13) [2]http://rouse.front.ru/
infofromip.zip:
Демонстрационная программа получения информации о компьютере на основе IP адреса
Позволяет узнать:
- Имя компьютера
- Список залогиненных пользователей
- Коментарий к компьютеру
- Провайдер (не тот который вы подумали :)
- MAC адресс
- Домен в который входит компьютер
- Если сеть доменная то дополнительно определяет имя сервера домена и группы в которые входит текущий пользователь...
← →
Piter © (2004-11-08 20:13) [3]там исходник на Delphi
← →
Piter © (2004-11-08 20:14) [4]насчет SendARP:
"Client: Requires Windows XP or Windows 2000 Professional.
Server: Requires Windows Server 2003 or Windows 2000 Server"
← →
Verg © (2004-11-08 20:33) [5]Бессмысленная задача.
← →
Piter © (2004-11-08 23:19) [6]Verg © (08.11.04 20:33) [5]
Бессмысленная задача.
Это почему же?
Например, в локальной сети раздача интернета идет по логину, паролю на прокси сервере, но при этом дополнительно проверяется MAC адрес - так очень часто делают. И с каких пор это стало бессмысленным?
← →
MegaVolt © (2004-11-09 09:08) [7]Задача не очень бессмысленна если учесть пристрастие к изменению IP. Хорошо что ещё не все умеют MAC-и менять.
PiterНа счёт того что в MSDN такой функции нет ты прав. Но возможно что в MSDN уже и нету инфы про 98 :( Так что я посмотрел что библиотека есть и решил проверить :) Большущее спасибо за ссылку.
← →
MegaVolt © (2004-11-09 09:25) [8]К сожалению пример только под 2k и выше :(
Короче я решил вопрос вот так:
function GetMAC(IP:PChar):string; // Получение MAC-адреса сетевого компьютера
const Data : string = "Test";
var UDP_in : TSockAddrIn;
pBuf : PChar;
TableSize : DWORD;
Error : DWORD;
NumEntries: DWORD;
IpNetRow : TMibIpNetRow;
I : Integer;
MAC : string;
UDP_Socket:TSocket;
WSA_Data : TWSAData;
begin
UDP_Socket:=Socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // Создаём UDP-сокет
MAC:="00-00-00-00-00-00";
UDP_in.sin_family:=AF_INET;
UDP_in.sin_port:=htons(5232); // Шлем на любой порт
UDP_in.sin_addr.S_addr:=inet_addr(IP); // Указываем нужный адрес
if SendTo(UDP_Socket,Data,5,0,UDP_in,SizeOf(UDP_in)) > 0
then
begin
TableSize:=0;
Error:=GetIpNetTable(PTMibIpNetTable(pBuf),@TableSize,True); // first call: get memsize needed
if Error <> ERROR_NO_DATA
then
begin
GetMem(pBuf,TableSize);
Error:=GetIpNetTable(PTMibIpNetTable(pBuf),@TableSize,True); // get table pointer
if Error = NO_ERROR
then
begin
NumEntries:=PTMibIpNetTable(pBuf)^.dwNumEntries;
if NumEntries > 0
then
begin
inc(pBuf,SizeOf(NumEntries));
for I:=1 to NumEntries do
begin
IpNetRow:=PTMibIpNetRow(pBuf)^;
with IpNetRow do
if (dwAddr = inet_addr(IP))and(dwType<>2)
then MAC:=MacAddr2Str(bPhysAddr,dwPhysAddrLen);
inc(pBuf,SizeOf(IpNetRow));
end;
dec(pBuf,SizeOf(DWORD)+NumEntries*SizeOf(IpNetRow));
end;
end;
FreeMem(pBuf);
end;
end;
Result:=MAC;
CloseSocket(UDP_Socket);
end;
← →
Verg © (2004-11-09 10:04) [9]
> [8] MegaVolt © (09.11.04 09:25)
Во-первых. Если ты хочешь найти в арп кеше запись подключившегося клиента, то зачем спрашивается отправлять ему какие-то UDP датаграммы? Подключение-то уже произошло и значит, обмен IP пакетами уже произошел. Т.о. в арп-кеше либо уже есть инф-ция о клиенте, либо ее нет. Если нет, то и никогда не будет. Хоть запосылайся UDP. Просто клиент в другом сегменте.
Во-вторых. Если задача не из разряда "учебных" и если речь идет об авторизации, то еще раз посоветую - не трать сил попусту. Привязка ip-mac еще ничего, кроме неудобств не приносила. Это как привязка софта с серийнику аппартуры. Лучше уж потратиться на какой-либо криптоалгоритм авторизации или вообще шифрования. И знаний прибавится и система будет гибче на порядок. У нас в городе, например, по-моему всего один провайдер остался, у которого все еще ip-mac привязка осталась. Да и то как "копчик"...
Все ушли на VPN. Нет, можно напрямую работать, но"п.2.3.7. В целях предотвращения несанкционированного доступа злоумышленников в Сеть с реквизитами Абонента, Абонент должен использовать систему авторизации. Если система авторизации Абонентом не использовалась, претензии по начисленному на Лицевой Счет Абонента объему трафика не принимаются. Система авторизации и статистика работы системы авторизации предоставляется Абоненту Оператором кабельных сетей."
В данный момент Вы можете воспользоваться для защиты либо программой авторизации, либо установить VPN-тоннелирование (с точки зрения п.2.3.7 Регламента приравнивается к системе авторизации).
← →
MegaVolt © (2004-11-09 11:25) [10]VergСпасибо за ответ :)
1. Задача сейчас поймать хулиганов в чате. Для этого был нарисован прозрачный экран который анализирует пакеты и плохие пихает в логи :) Чтобы понять кто это гадит нуна знать IP и желательно MAC. Вот для того чтобы можно было поймать и надавать по ушам и делаю поиск мака.
2. Ты пишешь что не обязательно посылать запрос. Т.е. всё что связано с сокетом я могу просто удалить и оставить просто работу с таблицей?
← →
MegaVolt © (2004-11-09 11:27) [11]VergСпасибо за ответ :)
1. Задача сейчас поймать хулиганов в чате. Для этого был нарисован прозрачный экран который анализирует пакеты и плохие пихает в логи :) Чтобы понять кто это гадит нуна знать IP и желательно MAC. Вот для того чтобы можно было поймать и надавать по ушам и делаю поиск мака.
2. Ты пишешь что не обязательно посылать запрос. Т.е. всё что связано с сокетом я могу просто удалить и оставить просто работу с таблицей?
← →
Verg © (2004-11-09 11:47) [12]
> Т.е. всё что связано с сокетом я могу просто удалить и оставить
> просто работу с таблицей?
Все, что связано с UDP сокетом.
Непосредственно после подключения клиента проси арп кеш (GetIpNetTable) и ищи в нем Socket.RemoteAddress.
Арп кеш чистится: из него удаляются записи, которыми не пользовались в течение 30 сек, по-моему. Так что, "клювом щелкать" не рекомендуется.
← →
Rouse_ © (2004-11-09 13:02) [13]Собственно говоря пример получения MAC адреса из ARP таблицы по совету [12] Verg © , как раз тут и лежит: > [2] Piter © (08.11.04 20:13)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.046 c