⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iphlpapi.pas

📁 这是一个用VC++编写的网络嗅探器
💻 PAS
📖 第 1 页 / 共 3 页
字号:
function NotifyRouteChange(var Handle: THandle; overlapped: POVERLAPPED): DWORD; stdcall;
{$EXTERNALSYM NotifyRouteChange}

function GetAdapterIndex(AdapterName: LPWSTR; var IfIndex: ULONG): DWORD; stdcall;
{$EXTERNALSYM GetAdapterIndex}

function AddIPAddress(Address: IPAddr; IpMask: IPMask; IfIndex: DWORD;
  var NTEContext, NTEInstance: ULONG): DWORD; stdcall;
{$EXTERNALSYM AddIPAddress}

function DeleteIPAddress(NTEContext: ULONG): DWORD; stdcall;
{$EXTERNALSYM DeleteIPAddress}

function GetNetworkParams(pFixedInfo: PFIXED_INFO; var pOutBufLen: ULONG): DWORD; stdcall;
{$EXTERNALSYM GetNetworkParams}

function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall;
{$EXTERNALSYM GetAdaptersInfo}

function GetPerAdapterInfo(IfIndex: ULONG; pPerAdapterInfo: PIP_PER_ADAPTER_INFO;
  var pOutBufLen: ULONG): DWORD; stdcall;
{$EXTERNALSYM GetPerAdapterInfo}

function IpReleaseAddress(const AdapterInfo: IP_ADAPTER_INDEX_MAP): DWORD; stdcall;
{$EXTERNALSYM IpReleaseAddress}

function IpRenewAddress(const AdapterInfo: IP_ADAPTER_INDEX_MAP): DWORD; stdcall;
{$EXTERNALSYM IpRenewAddress}

function SendARP(const DestIP, SrcIP: IPAddr; pMacAddr: PULONG; var PhyAddrLen: ULONG): DWORD; stdcall;
{$EXTERNALSYM SendARP}

function GetRTTAndHopCount(DestIpAddress: IPAddr; var HopCount: ULONG;
  MaxHops: ULONG; var RTT: ULONG): BOOL; stdcall;
{$EXTERNALSYM GetRTTAndHopCount}

function GetFriendlyIfIndex(IfIndex: DWORD): DWORD; stdcall;
{$EXTERNALSYM GetFriendlyIfIndex}

function EnableRouter(var pHandle: THandle; pOverlapped: POVERLAPPED): DWORD; stdcall;
{$EXTERNALSYM EnableRouter}

function UnenableRouter(pOverlapped: POVERLAPPED; lpdwEnableCount: LPDWORD): DWORD; stdcall;
{$EXTERNALSYM UnenableRouter}

{$ELSE}

var
  GetBestRoute: function (dwDestAddr, dwSourceAddr: DWORD; pBestRoute: PMIB_IPFORWARDROW): DWORD; stdcall;
  {$EXTERNALSYM GetBestRoute}

  NotifyAddrChange: function (var Handle: THandle; overlapped: POVERLAPPED): DWORD; stdcall;
  {$EXTERNALSYM NotifyAddrChange}

  NotifyRouteChange: function (var Handle: THandle; overlapped: POVERLAPPED): DWORD; stdcall;
  {$EXTERNALSYM NotifyRouteChange}

  GetAdapterIndex: function (AdapterName: LPWSTR; var IfIndex: ULONG): DWORD; stdcall;
  {$EXTERNALSYM GetAdapterIndex}

  AddIPAddress: function (Address: IPAddr; IpMask: IPMask; IfIndex: DWORD;
    var NTEContext, NTEInstance: ULONG): DWORD; stdcall;
  {$EXTERNALSYM AddIPAddress}

  DeleteIPAddress: function (NTEContext: ULONG): DWORD; stdcall;
  {$EXTERNALSYM DeleteIPAddress}

  GetNetworkParams: function (pFixedInfo: PFIXED_INFO; var pOutBufLen: ULONG): DWORD; stdcall;
  {$EXTERNALSYM GetNetworkParams}

  GetAdaptersInfo: function (pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall;
  {$EXTERNALSYM GetAdaptersInfo}

  GetPerAdapterInfo: function (IfIndex: ULONG; pPerAdapterInfo: PIP_PER_ADAPTER_INFO;
    var pOutBufLen: ULONG): DWORD; stdcall;
  {$EXTERNALSYM GetPerAdapterInfo}

  IpReleaseAddress: function (const AdapterInfo: IP_ADAPTER_INDEX_MAP): DWORD; stdcall;
  {$EXTERNALSYM IpReleaseAddress}

  IpRenewAddress: function (const AdapterInfo: IP_ADAPTER_INDEX_MAP): DWORD; stdcall;
  {$EXTERNALSYM IpRenewAddress}

  SendARP: function (const DestIP, SrcIP: IPAddr; pMacAddr: PULONG; var PhyAddrLen: ULONG): DWORD; stdcall;
  {$EXTERNALSYM SendARP}

  GetRTTAndHopCount: function (DestIpAddress: IPAddr; var HopCount: ULONG;
    MaxHops: ULONG; var RTT: ULONG): BOOL; stdcall;
  {$EXTERNALSYM GetRTTAndHopCount}

  GetFriendlyIfIndex: function (IfIndex: DWORD): DWORD; stdcall;
  {$EXTERNALSYM GetFriendlyIfIndex}

  EnableRouter: function (var pHandle: THandle; pOverlapped: POVERLAPPED): DWORD; stdcall;
  {$EXTERNALSYM EnableRouter}

  UnenableRouter: function (pOverlapped: POVERLAPPED; lpdwEnableCount: LPDWORD): DWORD; stdcall;
  {$EXTERNALSYM UnenableRouter}

{$ENDIF}

{$IFDEF IPHLPAPI_LINKONREQUEST}

function IpHlpApiInitAPI: Boolean;
procedure IpHlpApiFreeAPI;

{$ENDIF}

function IpHlpApiCheckAPI: Boolean;

implementation

const
  iphlpapilib = 'iphlpapi.dll';

{$IFNDEF IPHLPAPI_DYNLINK}

function GetNumberOfInterfaces; external iphlpapilib name 'GetNumberOfInterfaces';
function GetIfEntry; external iphlpapilib name 'GetIfEntry';
function GetIfTable; external iphlpapilib name 'GetIfTable';
function GetIpAddrTable; external iphlpapilib name 'GetIpAddrTable';
function GetIpNetTable; external iphlpapilib name 'GetIpNetTable';
function GetIpForwardTable; external iphlpapilib name 'GetIpForwardTable';
function GetTcpTable; external iphlpapilib name 'GetTcpTable';
function GetUdpTable; external iphlpapilib name 'GetUdpTable';
function GetIpStatistics; external iphlpapilib name 'GetIpStatistics';
function GetIcmpStatistics; external iphlpapilib name 'GetIcmpStatistics';
function GetTcpStatistics; external iphlpapilib name 'GetTcpStatistics';
function GetUdpStatistics; external iphlpapilib name 'GetUdpStatistics';
function SetIfEntry; external iphlpapilib name 'SetIfEntry';
function CreateIpForwardEntry; external iphlpapilib name 'CreateIpForwardEntry';
function SetIpForwardEntry; external iphlpapilib name 'SetIpForwardEntry';
function DeleteIpForwardEntry; external iphlpapilib name 'DeleteIpForwardEntry';
function SetIpStatistics; external iphlpapilib name 'SetIpStatistics';
function SetIpTTL; external iphlpapilib name 'SetIpTTL';
function CreateIpNetEntry; external iphlpapilib name 'CreateIpNetEntry';
function SetIpNetEntry; external iphlpapilib name 'SetIpNetEntry';
function DeleteIpNetEntry; external iphlpapilib name 'DeleteIpNetEntry';
function FlushIpNetTable; external iphlpapilib name 'FlushIpNetTable';
function CreateProxyArpEntry; external iphlpapilib name 'CreateProxyArpEntry';
function DeleteProxyArpEntry; external iphlpapilib name 'DeleteProxyArpEntry';
function SetTcpEntry; external iphlpapilib name 'SetTcpEntry';
function GetInterfaceInfo; external iphlpapilib name 'GetInterfaceInfo';
function GetUniDirectionalAdapterInfo; external iphlpapilib name 'GetUniDirectionalAdapterInfo';
function GetBestInterface; external iphlpapilib name 'GetBestInterface';
function GetBestRoute; external iphlpapilib name 'GetBestRoute';
function NotifyAddrChange; external iphlpapilib name 'NotifyAddrChange';
function NotifyRouteChange; external iphlpapilib name 'NotifyRouteChange';
function GetAdapterIndex; external iphlpapilib name 'GetAdapterIndex';
function AddIPAddress; external iphlpapilib name 'AddIPAddress';
function DeleteIPAddress; external iphlpapilib name 'DeleteIPAddress';
function GetNetworkParams; external iphlpapilib name 'GetNetworkParams';
function GetAdaptersInfo; external iphlpapilib name 'GetAdaptersInfo';
function GetPerAdapterInfo; external iphlpapilib name 'GetPerAdapterInfo';
function IpReleaseAddress; external iphlpapilib name 'IpReleaseAddress';
function IpRenewAddress; external iphlpapilib name 'IpRenewAddress';
function SendARP; external iphlpapilib name 'SendARP';
function GetRTTAndHopCount; external iphlpapilib name 'GetRTTAndHopCount';
function GetFriendlyIfIndex; external iphlpapilib name 'GetFriendlyIfIndex';
function EnableRouter; external iphlpapilib name 'EnableRouter';
function UnenableRouter; external iphlpapilib name 'UnenableRouter';

{$ELSE}

var
 HIpHlpApi: THandle = 0;

function IpHlpApiInitAPI: Boolean;
begin
  Result := False;
  if HIphlpapi = 0 then HIpHlpApi := LoadLibrary(iphlpapilib);
  if HIpHlpApi > HINSTANCE_ERROR then
  begin
    @GetNetworkParams := GetProcAddress(HIpHlpApi, 'GetNetworkParams');
    @GetAdaptersInfo := GetProcAddress(HIpHlpApi, 'GetAdaptersInfo');
    @GetPerAdapterInfo := GetProcAddress(HIpHlpApi, 'GetPerAdapterInfo');
    @GetAdapterIndex := GetProcAddress(HIpHlpApi, 'GetAdapterIndex');
    @GetUniDirectionalAdapterInfo := GetProcAddress(HIpHlpApi, 'GetUniDirectionalAdapterInfo');
    @GetNumberOfInterfaces := GetProcAddress(HIpHlpApi, 'GetNumberOfInterfaces');
    @GetInterfaceInfo := GetProcAddress(HIpHlpApi, 'GetInterfaceInfo');
    @GetFriendlyIfIndex := GetProcAddress(HIpHlpApi, 'GetFriendlyIfIndex');
    @GetIfTable := GetProcAddress(HIpHlpApi, 'GetIfTable');
    @GetIfEntry := GetProcAddress(HIpHlpApi, 'GetIfEntry');
    @SetIfEntry := GetProcAddress(HIpHlpApi, 'SetIfEntry');
    @GetIpAddrTable := GetProcAddress(HIpHlpApi, 'GetIpAddrTable');
    @AddIPAddress := GetProcAddress(HIpHlpApi, 'AddIPAddress');
    @DeleteIPAddress := GetProcAddress(HIpHlpApi, 'DeleteIPAddress');
    @IpReleaseAddress := GetProcAddress(HIpHlpApi, 'IpReleaseAddress');
    @IpRenewAddress := GetProcAddress(HIpHlpApi, 'IpRenewAddress');
    @GetIpNetTable := GetProcAddress(HIpHlpApi, 'GetIpNetTable');
    @CreateIpNetEntry := GetProcAddress(HIpHlpApi, 'CreateIpNetEntry');
    @DeleteIpNetEntry := GetProcAddress(HIpHlpApi, 'DeleteIpNetEntry');
    @CreateProxyArpEntry := GetProcAddress(HIpHlpApi, 'CreateProxyArpEntry');
    @DeleteProxyArpEntry := GetProcAddress(HIpHlpApi, 'DeleteProxyArpEntry');
    @SendARP := GetProcAddress(HIpHlpApi, 'SendARP');
    @GetIpStatistics := GetProcAddress(HIpHlpApi, 'GetIpStatistics');
    @GetIcmpStatistics := GetProcAddress(HIpHlpApi, 'GetIcmpStatistics');
    @SetIpStatistics := GetProcAddress(HIpHlpApi, 'SetIpStatistics');
    @SetIpTTL := GetProcAddress(HIpHlpApi, 'SetIpTTL');
    @GetIpForwardTable := GetProcAddress(HIpHlpApi,'GetIpForwardTable');
    @CreateIpForwardEntry := GetProcAddress(HIpHlpApi, 'CreateIpForwardEntry');
    @GetTcpTable := GetProcAddress(HIpHlpApi, 'GetTcpTable');
    @GetUdpTable := GetProcAddress(HIpHlpApi, 'GetUdpTable');
    @GetTcpStatistics := GetProcAddress(HIpHlpApi, 'GetTcpStatistics');
    @GetUdpStatistics := GetProcAddress(HIpHlpApi, 'GetUdpStatistics');
    @SetIpForwardEntry := GetProcAddress(HIpHlpApi, 'SetIpForwardEntry');
    @DeleteIpForwardEntry := GetProcAddress(HIpHlpApi, 'DeleteIpForwardEntry');
    @SetIpNetEntry := GetProcAddress(HIpHlpApi, 'SetIpNetEntry');
    @SetTcpEntry := GetProcAddress(HIpHlpApi, 'SetTcpEntry');
    @GetBestRoute := GetProcAddress(HIpHlpApi, 'GetBestRoute');
    @NotifyAddrChange := GetProcAddress(HIpHlpApi, 'NotifyAddrChange');
    @NotifyRouteChange := GetProcAddress(HIpHlpApi, 'NotifyRouteChange');
    @GetBestInterface := GetProcAddress(HIpHlpApi, 'GetBestInterface');
    @GetRTTAndHopCount := GetProcAddress(HIpHlpApi, 'GetRTTAndHopCount');
    @EnableRouter := GetProcAddress(HIpHlpApi, 'EnableRouter');
    @UnenableRouter := GetProcAddress(HIpHlpApi, 'UnenableRouter');
    Result := True;
  end;
end;

procedure IpHlpApiFreeAPI;
begin
  if HIpHlpApi <> 0 then FreeLibrary(HIpHlpApi);
  HIpHlpApi := 0;
end;

{$ENDIF}

function IpHlpApiCheckAPI: Boolean;
begin
  {$IFDEF IPHLPAPI_DYNLINK}
  Result := HIpHlpApi <> 0;
  {$ELSE}
  Result := True;
  {$ENDIF}
end;

initialization

  {$IFDEF IPHLPAPI_DYNLINK}
  {$IFNDEF IPHLPAPI_LINKONREQUEST}
  IpHlpApiInitAPI;
  {$ENDIF}
  {$ENDIF}

finalization

  {$IFDEF IPHLPAPI_DYNLINK}
  IpHlpApiFreeAPI;
  {$ENDIF}

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -