zoukankan      html  css  js  c++  java
  • delphi 获取跃点、网卡序号,添加、删除路由节点

      1 uses
      2   Windows, WinSock, IpHlpApi, IpRtrMib;
      3 
      4 //获取网卡序号
      5 function GetGPIndex(const AIP: AnsiString): Cardinal;
      6 var
      7   ipinfo, info: PIpAdapterInfo;
      8   ips: TIpAddrString;
      9   len, nerr: Cardinal;
     10   str: AnsiString;
     11   ok: Boolean;
     12 begin
     13   Result := 0;
     14 
     15   len := 0;
     16   nerr := GetAdaptersInfo(nil, len);
     17   GetMem(ipinfo, len);
     18   nerr := GetAdaptersInfo(ipinfo, len);
     19   ok := False;
     20   if nerr = 0 then
     21   begin
     22     info := ipinfo;
     23     while(info <> nil) do
     24     begin
     25         ips := info^.IpAddressList;
     26         str := StrPas(ips.IpAddress.S);
     27         str := Trim(Str);
     28         while(str <> '')do
     29         begin
     30           if SameText(str, AIP) then
     31           begin
     32             Result := info^.Index;
     33             ok := True;
     34             Break;
     35           end
     36           else begin
     37             if Assigned(ips.Next) then
     38             begin
     39               ips := ips.Next^;
     40               str := StrPas(ips.IpAddress.S);
     41               str := Trim(Str);
     42             end
     43             else str := '';
     44           end;
     45         end;
     46       if ok then
     47         Break;
     48       info := info^.Next;
     49     end;
     50   end;
     51   FreeMem(ipinfo, len);
     52 end;
     53 
     54 // 获取跃点
     55 function GetHops(const AIP: AnsiString): Cardinal;
     56 var
     57   pIpForwardTable: PMibIpForwardTable;
     58   dwSize, dwStatus,NewGateway: Cardinal;
     59   bOrder, needfree: Boolean;
     60   i: Integer;
     61 begin
     62   Result := 30;
     63   pIpForwardTable := nil;
     64   dwSize := 0;
     65   dwStatus := 0;
     66   NewGateway := $DDCCBBAA;
     67   needfree := False;
     68   dwStatus := GetIpForwardTable(pIpForwardTable, dwSize, False);
     69   if (dwStatus = ERROR_INSUFFICIENT_BUFFER) then
     70   begin
     71     GetMem(pIpForwardTable, dwSize);
     72     needfree := True;
     73     dwStatus := GetIpForwardTable(pIpForwardTable, dwSize, False);
     74   end;
     75   if dwStatus = ERROR_SUCCESS then
     76   begin
     77     NewGateway := inet_addr(PAnsiChar(AIP));
     78     for i := 0 to pIpForwardTable^.dwNumEntries - 1 do
     79       if pIpForwardTable^.table[i].dwForwardDest = NewGateway then
     80       begin
     81         Result := pIpForwardTable^.table[i].dwForwardMetric1;
     82         Break;
     83       end;
     84   end;
     85   if needfree then
     86     FreeMem(pIpForwardTable);
     87 end;
     88 
     89 //初始化MibIP  AIP: 路由节点  AMask: 节点掩码  ANextHop: 下一节点  ANetwork:网卡序号  AHop: 跃点
     90 function InitMibIp(const AIP, AMask, ANextHop: AnsiString; ANetwork, AHop: Cardinal): TMibIpForwardRow;
     91 begin
     92   FillChar(Result, SizeOf(Result), 0);
     93   Result.dwForwardDest := inet_addr(PAnsiChar(AIP));
     94   Result.dwForwardMask := inet_addr(PAnsiChar(AMask));
     95   Result.dwForwardNextHop := inet_addr(PAnsiChar(ANextHop));
     96   Result.dwForwardPolicy := 0;
     97     Result.dwForwardIfIndex := ANetwork;
     98     Result.dwForwardType := 4;  //the next hop is not the final dest
     99     Result.dwForwardProto := 3; //PROTO_IP_NETMGMT
    100     Result.dwForwardAge := 0;
    101     Result.dwForwardNextHopAS := 0;
    102     Result.dwForwardMetric1 := AHop;
    103     Result.dwForwardMetric2 := $FFFFFFFF;
    104     Result.dwForwardMetric3 := $FFFFFFFF;
    105     Result.dwForwardMetric4 := $FFFFFFFF;
    106     Result.dwForwardMetric5 := $FFFFFFFF;
    107 end;
    108 
    109 //添加路由
    110 function AddRoute(const AIP, AMask, ANextHop: AnsiString; ANetwork, AHop: Cardinal): Boolean;
    111 begin
    112   Result := CreateIpForwardEntry(InitMibIp(AIP, AMask, ANextHop, ANetwork, AHop) = NO_ERROR;
    113 end;
    114 
    115 //删除路由
    116 function DellRoute(const AIP, AMask, ANextHop: AnsiString; ANetwork, AHop: Cardinal): Boolean;
    117 begin
    118   Result := DeleteIpForwardEntry(InitMibIp(AIP, AMask, ANextHop, ANetwork, AHop) = NO_ERROR;
    119 end;
  • 相关阅读:
    Vue实现的mini计算器
    动态 WebApi 引擎使用教程(3行代码完成动态 WebApi 构建)
    [备忘] 解决 rzc discover exited with code -2147450730 问题
    一个由于侵入框架引起的故障
    计算机基础--01
    csharp: read xml
    Hystrix 原理深入分析-spring cloud 入门教程
    Hystrix 简介-spring cloud 入门教程
    linux下使用 du查看某个文件或目录占用磁盘空间的大小
    最火的Spring Cloud Gateway 为经过身份验证的用户启用速率限制实践-spring cloud 入门教程
  • 原文地址:https://www.cnblogs.com/btxz/p/7929040.html
Copyright © 2011-2022 走看看