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

📄 iprelation.pas

📁 这是一个用VC++编写的网络嗅探器
💻 PAS
📖 第 1 页 / 共 2 页
字号:
   // initialize values
   for i := 0 to MaxVal do begin
       dataOut[Chart1.Tag,i] := 0;
       dataIn[Chart1.Tag,i]  := 0;
       dataFL[Chart1.Tag,i]  := 0;
       Chart1.SeriesList.Series[0].Add(dataOut[Chart1.Tag,i]);
       Chart1.SeriesList.Series[1].Add(dataIn[Chart1.Tag,i]);
       if TypeI=2 then
       CHart1.SeriesList.Series[2].Add(dataFL[Chart1.Tag,i]);
   end;
   P[Chart1.Tag] := 0;
end;

//==============================================================================
// 得到当前进出包个数  getMAXpackInout
// 返回:packetsIn,packetsOut,packetsFL: 曲线点数  ifaceInfo:TiFaceInfo
//             Typei:integer; 0 : outIn 2条Seiros(曲线)
//                            1 : Borst 2条Seiros(曲线)
//                            2 : netFL 3条Seiros(曲线)
//==============================================================================
procedure getMAXpackInout(ifaceInfo:TiFaceInfo;TypeI:integer;ChartTag:integer;var packetsIn , packetsOut, packetsFL:Double);
var
  j: integer;
  s: string;
  xIn, xOut,xFL                :   Double;
  vPBin,vPubIn,vPbOut,vPubOut  :   Double;
begin
  if ifaceInfo.CardIndex <0 then Exit;

  if  TypeI = 0 then   // 进出口包
  begin
     xIn:=ifaceInfo.BIn;
     xOut:=ifaceInfo.BOut;
     packetsOut := (xOut - TempInfo.tmpOut[ChartTag,TypeI]) / 1024 ;  if packetsOut<0 then packetsOut := 0;
     packetsIn  := (xIn - TempInfo.tmpIn[ChartTag,TypeI]) / 1024 ;    if packetsIn <0  then packetsIn := 0;

     tempInfo.tmpIn[ChartTag,TypeI]    := ifaceInfo.BIn;
     tempInfo.tmpOut[ChartTag,TypeI]   := ifaceInfo.BOut;
  end
  else if TypeI=1 then  // 广播带宽负载率
  begin
     vPubIn:=ifaceInfo.pubIn - TempInfo.tmpPubIn[ChartTag,TypeI];
     vPbin := ifaceInfo.pBin - TempInfo.tmpPBin[ChartTag,TypeI];
     if (VpBin+vPubIn)=0 then Xin:=0 else
     xIn:=(vPubIn/(vPBin+vPubIn))*100;

     vPubOut:=ifaceInfo.pubOut - TempInfo.tmpPubOut[ChartTag,TypeI];
     vPbOut := ifaceInfo.pbOut - TempInfo.tmpPbOut[ChartTag,TypeI];
     if (vPbOut+vPubOut)=0 then Xout:=0 else
     xOut:=(vPubOut/(vPbOut+vPubOut))*100;

     packetsOut := (xOut);
     packetsIn  := (xIn );


     tempInfo.tmpPubIn[ChartTag,TypeI] := IfaceInfo.PubIn;
     tempInfo.tmpPbin[ChartTag,TypeI]  := IfaceInfo.pBin ;
     tempInfo.tmpPubOut[ChartTag,TypeI]:= IfaceInfo.PubOut;
     tempInfo.tmpPbOut[ChartTag,TypeI] := IfaceInfo.PbOut;

  end
  else if TypeI=2 then  // 网络负载率
  begin
    if (IfaceInfo.nSpeed =0) then
    begin
     xin:=0; xOut:=0;xFL:=0;
    end
    else
    begin
    xIn:= (ifaceInfo.Bin- TempInfo.tmpIn[ChartTag,TypeI])*(8/ifaceInfo.nSpeed);
    xOut:=(ifaceInfo.BOut -TempInfo.tmpOut[ChartTag,TypeI])*(8/ifaceInfo.nSpeed);
    xFL:= (ifaceInfo.BIn - TempInfo.tmpIn[ChartTag,TypeI]+ ifaceInfo.BOut-TempInfo.tmpOut[ChartTag,TypeI])*(4/ifaceInfo.NSpeed);
    end;
    packetsOut := (xOut)*100;
    packetsIn  := (xIn)*100;
    packetsFL  := (xFL)*100;

    tempInfo.tmpIn[ChartTag,TypeI]    := ifaceInfo.BIn;
    tempInfo.tmpOut[ChartTag,TypeI]   := ifaceInfo.BOut;
  end;

  // save new base
  {tempInfo.tmpIn[ChartTag,TypeI]    := ifaceInfo.BIn;
  tempInfo.tmpOut[ChartTag,TypeI]   := ifaceInfo.BOut;

  tempInfo.tmpPubIn[ChartTag,TypeI] := IfaceInfo.PubIn;
  tempInfo.tmpPbin[ChartTag,TypeI]  := IfaceInfo.pBin ;
  tempInfo.tmpPubOut[ChartTag,TypeI]:= IfaceInfo.PubOut;
  tempInfo.tmpPbOut[ChartTag,TypeI] := IfaceInfo.PbOut; }
end;

//==============================================================================
//   可以刷新的函数
//  参数:     iFaceInfo:TiFaceInfo; -- 传入的结构(接口信息)
//             Typei:integer; 0 : outIn 2条Seiros(曲线)
//                            1 : Borst 2条Seiros(曲线)
//                            2 : netFL 3条Seiros(曲线)
//             Chart1:        传入的,传出的 TChart
//==============================================================================
procedure TimerOnTime(iFaceInfo:TiFaceInfo;Typei:integer;var Chart1:TChart);
Var
   i : Integer;
begin
   // shift all values left
   if p[Chart1.Tag]>=MaxVal then
   begin
      Move(dataOut[Chart1.tag,1], dataOut[Chart1.tag,0], MaxVal*sizeOf(Double));
      Move(dataIn[Chart1.tag,1],  dataIn[Chart1.tag,0],  MaxVal*sizeOf(Double));
      if TypeI=2 then
      Move(dataFL[Chart1.tag,1],  dataFL[Chart1.tag,0],  MaxVal*sizeOf(Double));
   end;

   // latest value
   getMAXpackInout(iFaceInfo,TypeI,Chart1.tag,dataIn[Chart1.tag,P[Chart1.tag]], dataOut[Chart1.tag,P[Chart1.tag]],dataFL[Chart1.tag,p[Chart1.tag]]);

   // display all values
   for i := 0 to MaxVal do begin
      Chart1.SeriesList.Series[0].YValue[i] := dataOut[Chart1.tag,i];
      Chart1.SeriesList.Series[1].YValue[i] := dataIn[Chart1.tag,i];
      if TypeI=2 then
      CHart1.SeriesList.Series[2].YValue[i] := DataFL[Chart1.tag,i];
   end;
   if p[Chart1.Tag]<MaxVal then inc(P[Chart1.Tag]);
end;
//==============================================================================
//
//==============================================================================
procedure initTempStru(CardI,TypeI:Integer);
begin
    tempInfo.tmpIn[CardI,typeI]:=0;
    tempInfo.tmpOut[CardI,TypeI]:=0;
    tempInfo.tmpFL[CardI,TypeI]:=0;
    tempInfo.tmpPBin[CardI,TypeI]:=0;
    tempInfo.tmpPubIn[CardI,TypeI]:=0;
    tempInfo.tmpPbOut[CardI,TypeI]:=0;
    tempInfo.tmpPubOut[CardI,TypeI]:=0;
end;
//*************************************************************************************
//
//*************************************************************************************
//------------------------------------------------------------------------------
// NameType         0 -- iDriverDesc
//                  1--iConnName
//                  2 -- iIpAddress
//                  iIPMask     = 3; // Ip's netMask 
//------------------------------------------------------------------------------
function newGetIfaceInfo(StrID:String):String;
const
  NetWorkReg ='SYSTEM\CurrentControlSet\Control\Network\';
  DevInfoReg ='SYSTEM\CurrentControlSet\Enum\';
  IPAddreReg ='SYSTEM\CurrentControlSet\Services\';
var
  Reg:TRegistry;
  DevList,IfaceList :TStringList;
  RegPath ,RegPath1:String;
  IfaceName,InstanceID,tmpStr :String;
  i,c:integer;


  S:Array[0..15*128] of Char;
  IPList:TStrings;
  DHCPFlag:Boolean;

begin
  try
    DHCPFlag:=False;
    Result:='';
    Reg := TRegistry.Create;
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    DevList :=TStringList.Create;
    IfaceList := TStringList.Create;
    IpList := TStringList.Create;
    try
    reg.OpenKeyReadOnly(NetWorkReg);
    reg.GetKeyNames(DevList);
    for i:= 0 to DevList.Count -1 do
    begin
        RegPath :=  NetWorkReg + DevList.Strings[i];
        Reg.CloseKey;
        if not Reg.OpenKey(RegPath,false) then Continue;
        tmpStr := Reg.ReadString('Class');
        if  Reg.ValueExists('Class') then
        begin
            IfaceName := Reg.ReadString('Class');
            if AnsiCompareText(ifaceName,'Net') = 0 then break;
        end;
    end;
    if i < DevList.Count then //有网卡
    begin
         try
          Reg.GetKeyNames(IfaceList);
          if (IfaceList.Count = 0 ) then
          begin
            Result := StrID; Exit;
          end;
          RegPath1 := RegPath +  '\' + StrID + '\Connection' ;
          Reg.CloseKey ;
          if not Reg.OpenKey(RegPath1,false) then
          begin
              Result:=StrID; Exit;
          end;
          IfaceName := Reg.ReadString('Name');
          Result:=IFaceName
          except
             Result:=StrID;
          end;
    end
    else
    begin
        Result := StrID;  Exit;
    end;
    except
       Result := StrID;
    end;
  finally
    IpList.free;
    DevList.Free;
    IfaceList.Free;
    Reg.closeKey;
    Reg.Free;
  end;
end;
end.

⌨️ 快捷键说明

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