Стянуть MAC адреса активных сетевых интерфесов и МАСи шлюзов.

Discussion in 'Безопасность и Анонимность' started by K0dZer0, 22 Mar 2011.

  1. K0dZer0

    K0dZer0 Banned

    Joined:
    30 Jun 2010
    Messages:
    49
    Likes Received:
    2
    Reputations:
    0
    Есть ли возможность стянуть с помощью скрипта на странице два MAC адреса , активных сетевых интерфейсов , желательно через соединение которого жертва выходит в интернет ?
    Может у кого уже есть такой скрип или ссылка на него, посодействуйте плиз.
    Через командную строку на Windows платформе это можно выяснить двумя командами :
    ipconfig /all
    и
    arp -a
    *nix:
    ifconfig
    и
    arp -a
    В конечном результате интересует MAC адрес шлюза , через который жертва выходит в интернет.
     
  2. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    296
    Likes Received:
    43
    Reputations:
    25
    Если интересует MAC внешнего интерфейса шлюза, то никак - хост его просто не знает. Каждый хост имеет ARP таблицу, в которой сопоставлены MAC и IP адреса данного сегмента сети. За шлюзом - уже другой сегмент сети, другая таблица ARP и шлюз данные из неё Вашему хосту не отдаст.

    Попробовал на пальцах объяснить :D
     
    #2 Steam[777], 22 Mar 2011
    Last edited: 22 Mar 2011
  3. K0dZer0

    K0dZer0 Banned

    Joined:
    30 Jun 2010
    Messages:
    49
    Likes Received:
    2
    Reputations:
    0
    Да ты верно рассуждаешь . Меня интерисует MAC адрес шлюза на данном сигменте сети :D
    Я в курсе , что жертва пользуется ноутом , через Wi-Fi , моя задача вычислить дом за определнный ганорар.

    Кокие языки программирования верхнего уровня смогут такое осуществить ?
     
  4. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    296
    Likes Received:
    43
    Reputations:
    25
    Спасибо за ссылку. Я знал,что гугл собирает инфо, но что реально "пробить" 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();
     
    #4 Steam[777], 22 Mar 2011
    Last edited: 22 Mar 2011
  5. K0dZer0

    K0dZer0 Banned

    Joined:
    30 Jun 2010
    Messages:
    49
    Likes Received:
    2
    Reputations:
    0
    Спасибки за участие.
    Хотелось бы средствами языков web программирования страниц ?
    А может их комбинированием? Такие , как Perl , PHP , JAVA, FLASH и т.п .
    А то вдруг жертва сидит в интернете , только с работы . А там AD поднято с цифровой подписью администратора на исполняемы файлы, без которой любая программа не запуститься по политикам безопасности.