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;
  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/btxz/p/7929040.html
Copyright © 2011-2022 走看看