В данной статье мы рассмотрим основные функции Windows API, которые позволяют работать с TCP/IP соединениями и IP-адресами в операционных системах семейства Windows. Это знание будет полезно для разработчиков, использующих Delphi и Pascal, поскольку примеры кода будут представлены на Object Pascal.
Получение списка доступных IP-адресов
Для получения информации о доступных сетевых интерфейсах и их IP-адресах можно использовать функцию GetAdaptersInfo() или GetAdaptersAddresses(). Эти функции позволяют извлечь данные о физических и логических сетевых интерфейсах, включая IP-адреса и маски подсети.
uses
Winapi.Windows,
Winapi.Netio;
function GetAdaptersInfo(var pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: PDWORD): BOOL; stdcall;
type
IP_ADAPTER_INFO = record
// Описание структуры IP_ADAPTER_INFO
end;
// Другие необходимые структуры, такие как IP_PER_ADAPTER_INFO, MIB_IPFORWARDTABLE и т.д.
// Пример использования GetAdaptersInfo
var
pAdapterInfo: PIP_ADAPTER_INFO;
pAdapterInfoNext: PIP_ADAPTER_INFO;
dwRetVal: DWORD;
dwBufLen: DWORD;
begin
dwBufLen := 0;
GetAdaptersInfo(nil, dwBufLen);
SetLength(pAdapterInfo, dwBufLen);
dwRetVal := GetAdaptersInfo(pAdapterInfo, dwBufLen);
pAdapterInfoNext := pAdapterInfo;
while Assigned(pAdapterInfoNext) do
begin
// Обработка полученных данных
pAdapterInfoNext := pAdapterInfoNext^.Next;
end;
// Освобождение памяти
GlobalFree(pAdapterInfo);
end;
Получение списка активных TCP/IP соединений
Для перечисления активных TCP/IP соединений используются функции GetTcpTable() или GetTcpTable2() для IPv4, и GetTcp6Table() или GetTcp6Table2() для IPv6.
uses
Winapi.Windows,
Winapi.IpHlpApi;
function GetTcpTable(var pTcpTable: PMIB_TCPTABLE; var pdwRows: PDWORD; var dwReserved: PDWORD; dwOrder: DWORD): DWORD; stdcall;
type
MIB_TCPTABLE = record
// Описание структуры MIB_TCPTABLE
end;
// Другие необходимые структуры, такие как MIB_TCPROW, MIB_TCP6TABLE и т.д.
// Пример использования GetTcpTable
var
pTcpTable: PMIB_TCPTABLE;
dwRetVal: DWORD;
dwBufLen: DWORD;
dwRows: DWORD;
begin
dwBufLen := 0;
dwRetVal := GetTcpTable(nil, dwBufLen, nil, FALSE);
SetLength(pTcpTable, dwBufLen);
dwRetVal := GetTcpTable(pTcpTable, dwRows, nil, FALSE);
// Обработка полученных данных
// Освобождение памяти
GlobalFree(pTcpTable);
end;
Подтвержденный ответ
В контексте обсуждения было отмечено, что для использования функций GetAdaptersInfo() и GetTcpTable() необходимо определить соответствующие структуры в среде разработки Delphi 7. После определения этих структур разработчик смог успешно использовать функции для получения информации о сетевых интерфейсах и соединениях.
Альтернативный ответ
В качестве альтернативы стандартным функциям GetAdaptersInfo() и GetTcpTable() можно использовать более новые функции GetAdaptersAddresses() и GetTcpTable2(), GetTcp6Table2(), которые предоставляют дополнительные возможности и улучшенные параметры для фильтрации данных.
Заключение
В данной статье мы представили обзор функций Windows API для работы с TCP/IP соединениями и IP-адресами, что является важным аспектом для разработчиков, работающих с сетью и интернет-сервисами в среде Delphi и Pascal. Приведенные примеры кода на Object Pascal помогут в интеграции этих функций в ваши приложения.
Обзор функций Windows API для работы с TCP/IP соединениями и IP-адресами, важный для разработчиков, использующих Delphi и Pascal.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.