Есть ли возможность стянуть с помощью скрипта на странице два MAC адреса , активных сетевых интерфейсов , желательно через соединение которого жертва выходит в интернет ? Может у кого уже есть такой скрип или ссылка на него, посодействуйте плиз. Через командную строку на Windows платформе это можно выяснить двумя командами : ipconfig /all и arp -a *nix: ifconfig и arp -a В конечном результате интересует MAC адрес шлюза , через который жертва выходит в интернет.
Если интересует MAC внешнего интерфейса шлюза, то никак - хост его просто не знает. Каждый хост имеет ARP таблицу, в которой сопоставлены MAC и IP адреса данного сегмента сети. За шлюзом - уже другой сегмент сети, другая таблица ARP и шлюз данные из неё Вашему хосту не отдаст. Попробовал на пальцах объяснить
Да ты верно рассуждаешь . Меня интерисует MAC адрес шлюза на данном сигменте сети Я в курсе , что жертва пользуется ноутом , через Wi-Fi , моя задача вычислить дом за определнный ганорар. Кокие языки программирования верхнего уровня смогут такое осуществить ?
Спасибо за ссылку. Я знал,что гугл собирает инфо, но что реально "пробить" WiFi по МАС не был в курсе. Выполнить такую задачу может любой язык высокого уровня, который умеет выполнять "внешние" приложения. Delphi и Си точно умеют. Выполняешь команды,которые сам описал - результат в файл, и отправляешь его себе каким-нибудь способом Для Delphi процедура: procedure ExecProgram(FileName:String); var TM: Cardinal; TempMem: PChar; BatchFileName: string; begin BatchFileName:=FileName; TM:=70; GetMem (TempMem,TM); GetShortPathName (pchar(BatchFileName), TempMem, TM); BatchFileName:=TempMem; FreeMem(TempMem); winexec(Pchar(BatchFileName),0); end; Вот еще вариант,для Дельфи Code: //////////////////////////////////////////////////////////////////////////////// // // **************************************************************************** // * Unit Name : ARPTable // * Purpose : Демо выполнения команды ARP -A // * Author : Александр (Rouse_) Багель // * Copyright : © Fangorn Wizards Lab 1998 - 2007 // * Version : 1.00 // * Home Page : http://rouse.drkb.ru // **************************************************************************** // program ARPTable; {$APPTYPE CONSOLE} uses Windows, SysUtils, CommCtrl; const IPHLPAPI = 'IPHLPAPI.DLL'; MAX_ADAPTER_ADDRESS_LENGTH = 8; type TMacAddress = array[0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of Byte; PMibIPNetRow = ^TMibIPNetRow; TMibIPNetRow = packed record dwIndex : DWORD; dwPhysAddrLen : DWORD; bPhysAddr : TMACAddress; dwAddr : DWORD; dwType : DWORD; end; PMibIPNetTable = ^TMibIPNetTable; TMibIPNetTable = packed record dwNumEntries : DWORD; Table: PMibIPNetRow; end; function GetIpNetTable(pIpNetTable: PMibIPNetTable; pdwSize: PULONG; bOrder: Boolean): DWORD; stdcall; external IPHLPAPI; function GetMAC(const Value: TMacAddress; const Length: DWORD): String; var I: Integer; begin // IP адрес представляет из себя 8 байт (2 байта зарезервированно) // Извлекаем каждый байт и преобразуем его в строку if Length = 0 then Result := '00-00-00-00-00-00' else begin Result := ''; for i:= 0 to Length -2 do Result := Result + IntToHex(Value[i], 2) + '-'; Result := Result + IntToHex(Value[Length-1], 2); end; end; function GetDottedIPFromInAddr(const InAddr: Integer): String; begin // IP адрес представляет из себя 4 байта расположенных в обратном порядке // Извлекаем каждый байт и преобразуем его в строку Result := ''; Result := IntToStr(FOURTH_IPADDRESS(InAddr)); Result := Result + '.' + IntToStr(THIRD_IPADDRESS(InAddr)); Result := Result + '.' + IntToStr(SECOND_IPADDRESS(InAddr)); Result := Result + '.' + IntToStr(FIRST_IPADDRESS(InAddr)); end; function GetType(const dwType: DWORD): String; begin // Константы типов записи описаны в MSDN case dwType of 1: Result := 'Other'; 2: Result := 'Invalid'; 3: Result := 'Dynamic'; 4: Result := 'Static'; end; end; var MibIPNetTable: PMibIPNetTable; MibIPNetRow: PMibIPNetRow; pdwSize: ULONG; I: Integer; InternetAddress, PhysicalAddress, AType: String; begin // Первоначально узнаем необходимый размер под буффер для функции // Для этого первым параметром передаем NIL, во второй параметр // вернется результат в случае если код ошибки будет ERROR_INSUFFICIENT_BUFFER if GetIpNetTable(nil, @pdwSize, False) = ERROR_INSUFFICIENT_BUFFER then begin // Выделяем необходимый буффер GetMem(MibIPNetTable, pdwSize); try // Выполняем функцию уже с буффером - результат должен быть NO_ERROR if GetIpNetTable(MibIPNetTable, @pdwSize, False) = NO_ERROR then begin // Получаем адрес начала массива записей TMibIPNetRow // (4 байта от начала самой структуры) MibIPNetRow := Pointer(DWORD(MibIPNetTable) + SizeOf(DWORD)); Writeln(' Internet Address Physical Address Type'); // Крутим цикл по всем записям, кол-во записей в dwNumEntries for I := 0 to MibIPNetTable^.dwNumEntries - 1 do begin // Получаем IP адрес InternetAddress := GetDottedIPFromInAddr(MibIPNetRow^.dwAddr); // Получаем МАС адрес PhysicalAddress := GetMAC(MibIPNetRow^.bPhysAddr, MibIPNetRow^.dwPhysAddrLen); // Получаем тип записи AType := GetType(MibIPNetRow^.dwType); // Выводим на экран Writeln(Format(' %-16s %17s %s', [InternetAddress, PhysicalAddress, AType])); // Переходим к следующей записи Inc(MibIPNetRow); end; end; finally // Освобождаем занятый буффер FreeMem(MibIPNetTable); end; end; Readln; end. Для C можно использовать system();
Спасибки за участие. Хотелось бы средствами языков web программирования страниц ? А может их комбинированием? Такие , как Perl , PHP , JAVA, FLASH и т.п . А то вдруг жертва сидит в интернете , только с работы . А там AD поднято с цифровой подписью администратора на исполняемы файлы, без которой любая программа не запуститься по политикам безопасности.