Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2016, 05:56   #1
Алиби
Пользователь
 
Регистрация: 23.11.2016
Сообщений: 31
По умолчанию arp таблица(делфи)

как можно вывести arp таблицу в файл либо в memo, и тд
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,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;
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$APPTYPE CONSOLE}



  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.
end.
не могу никак вывести это либо в файл либо в memo listbox и тд
Алиби вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
arp таблица Drago56 C/C++ Сетевое программирование 2 28.01.2016 11:05
Делфи таблица BastAngel БД в Delphi 5 14.01.2012 19:52
ARP vova65 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.12.2011 14:01
Таблица в делфи firephenix Общие вопросы Delphi 4 07.03.2011 18:05
Реализовать такую тему как в винде ( arp -a ), получить ARP таблицу APOSTOL Работа с сетью в Delphi 3 07.06.2007 12:15