Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

Как считать траффик ?   Найти похожие ветки 

 
VID ©   (2004-05-04 11:46) [0]

Хочу узнать как можно считать ВХОДЯЩИЙ и ИСХОДЯЩИЙ траффик (раздельно) для какого-нибудь (по выбору)соединения.
Допустим есть обычное диал-ап соединение к интернету - как посчитать траффик проходящий за час, например ?


 
-=Rezya=-   (2004-05-04 13:18) [1]

Введи в поиске на этом сайте Снифер или подсчет трафика. Здесь по этому поводу много уже сказано. :-))))


 
VID ©   (2004-05-04 13:52) [2]

Ввёл:
1. Подсчёт траффика.
2. Подсчёт трафика.
3. Сниффер.
4. Снифер.

Результатов - ноль. Либо поиск остался как и прежде нерабочим, либо информации нету.

а она нужна !


 
-=Rezya=-   (2004-05-04 18:20) [3]

Даа. Наверное уже в архив отпрвили. Ок тогда вото тебе код снифера приводимый тут Велики и незабвенным Verg-ом.

program Console;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils,
WinSock2,
mstcpip;
const
IP_MAXPACKET = 65535;
type
  PIPHeader = ^TIPHeader;
  TIPHeader = packed record
    verlen : byte;      // âåðñèÿ è äëèíà çàãîëîâêà
    tos    : byte;      // òèï ñåðâèñà
    length : word;      // äëèíà âñåãî ïàêåòà
    id     : word;      // Id
    offset : word;      // ôëàãè è ñìåùåíèÿ
    ttl    : byte;      // âðåìÿ æèçíè
    protocol : byte;    // ïðîòîêîë
    xsum   : word;      // êîíòðîëüíàÿ ñóììà
    src    : TInAddr;   // IP-àäðåñ îòïðàâèòåëÿ
    dst    : TInAddr;   // IP-àäðåñ íàçíà÷åíèÿ
  end;
var
WSAData : TWSAData;
Sa : TSockAddrIn;
Rcvd : integer;
RS   : TSocket;
flag : DWORD;
Buffer : array[0..IP_MAXPACKET] of byte;
Iph : PIpHeader;
Info : String;
Src, Dst : string;

function CtrlHandler(dwCtrlType : DWORD):BOOL; stdcall;
var S : TSocket;
begin
if RS<>INVALID_SOCKET then
begin
  S:= RS;
  RS := INVALID_SOCKET;
  CloseSocket(S);
end;
end;

function ToOem(const S : string):string;
begin
Result := S;
if Result<>"" then
  CharToOemBuff(pchar(Result), pchar(Result), length(Result));
end;

procedure PrintErr(Err : DWORD; Wt : boolean);
begin
Writeln(ToOem(SysErrorMessage(Err)));
if Wt then ReadLn;
end;

procedure ExitErr;
begin
if WSAGetLastError<>NO_ERROR then
  PrintErr(WSAGetLastError, true);
if Rs<> INVALID_SOCKET then
  CloseSocket(RS);
if WSAData.wVersion <> 0 then
  WSACleanup;
halt(0);
end;

function checksocket(Ret : integer):integer;
begin
Result := Ret;
if Result = SOCKET_ERROR then
   ExitErr;
end;

function ProtoString(Proto:byte):string;
begin
result:="";
case proto of
  IPPROTO_ICMP   : result:="ICMP";
  IPPROTO_TCP    : result:="TCP";
  IPPROTO_UDP    : result:="UDP";
  else
   result := "other";
end;
end;

begin
RS := INVALID_SOCKET;
if ParamCount <> 1 then
begin
  Writeln("Usage: "+ExtractFileName(ParamStr(0))+" <IP address>");
  Readln;
  Exit;
end;
if WSAStartup(MAKEWORD(2, 2), WSAData)<> NO_ERROR then
   ExitErr;
try
  RS := socket(PF_INET, SOCK_RAW, IPPROTO_IP);
  if RS = INVALID_SOCKET then
    ExitErr;
  try
    ZeroMemory( @sa, sizeof(sa) );
    sa.sin_family := AF_INET;
    Dst := ParamStr(1);
    sa.sin_addr.S_addr := inet_addr(pchar(Dst));
    if bind(RS, @sa, sizeof(sa)) = SOCKET_ERROR then
      ExitErr;
    flag:= 1;
    if ioctlsocket(RS, SIO_RCVALL , flag) = SOCKET_ERROR then
      ExitErr;
    writeln("Rcv-len"#9"IP-len"#9"HDR-len"#9"From"#9#9"To"#9#9"Class"#9"Proto");
    SetconsoleCtrlHandler(@CtrlHandler, LongBool(TRUE));
    repeat
      Rcvd := checksocket( recv(RS, Buffer, sizeof(Buffer), 0) );// Вот эта строчка!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      if Rcvd = 0 then continue;
      Iph := @Buffer;
      if (Iph^.verlen shr 4) = 4 then
      begin
        Info := "";
        if Iph^.src.S_addr = Sa.sin_addr.S_addr then
          Info := Info + "O";
        if    (Iph^.dst.S_addr <> Sa.sin_addr.S_addr)
          and (Iph^.src.S_addr <> Sa.sin_addr.S_addr) then
          Info := Info + "G";
        if Iph^.dst.S_addr = htonl( INADDR_BROADCAST ) then
          Info := Info +"Bn";
        Src := inet_ntoa(Iph^.src);
        Dst := inet_ntoa(Iph^.dst);
        Writeln(
           Rcvd, #9,
           ntohs( Iph^.length ),#9,
           (Iph^.verlen and $F) shl 2, #9,
           Src,#9,
           Dst,#9,
           Tooem(Info), #9,
           ProtoString(Iph^.protocol)
        );
      end;
    until Rcvd = 0;
  finally
    closesocket(RS);
  end;
finally
  WSACleanup;
end;
end.


В переменную  Rcvd при каждом принятом пакете заносится размер принятого пакета т.е. В дальнейшем сумируй и все....
Единственные оговорки:по DialUp- Работает только на прием. А по сетевой карте в обе стороны.
Направления можеш определять по адресу отправителя или получателя.


 
VID ©   (2004-05-04 23:57) [4]

спасибо конечно за код, только вот при компиляции сразу же наткнулся на то, что у меня нету
WinSock2
mstcpip

что делать то ? пробовал найти соотв. файлы на компе - действительно нету


 
-=Rezya=-   (2004-05-05 01:12) [5]

WinSock2 возьми здесь http://home.earthlink.net/~akonshin/files/winsock2.zip
А по поводу mstcpip
То вот тебе этот UNIT с молчаливого согласия Verg-а :-))))

unit mstcpip;

interface
uses Winsock2;
type
  _tcp_keepalive  = packed record
     onoff : u_long;
     keepalivetime : u_long;
     keepaliveinterval : u_long;
  end;

const
// New WSAIoctl Options
SIO_RCVALL                           = IOC_IN or IOC_VENDOR or 1;
SIO_RCVALL_MCAST                     = IOC_IN or IOC_VENDOR or 2;
SIO_RCVALL_IGMPMCAST                 = IOC_IN or IOC_VENDOR or 3;
SIO_KEEPALIVE_VALS                   = IOC_IN or IOC_VENDOR or 4;
SIO_ABSORB_RTRALERT                  = IOC_IN or IOC_VENDOR or 5;
SIO_UCAST_IF                         = IOC_IN or IOC_VENDOR or 6;
SIO_LIMIT_BROADCASTS                 = IOC_IN or IOC_VENDOR or 7;
SIO_INDEX_BIND                       = IOC_IN or IOC_VENDOR or 8;
SIO_INDEX_MCASTIF                    = IOC_IN or IOC_VENDOR or 9;
SIO_INDEX_ADD_MCAST                  = IOC_IN or IOC_VENDOR or 10;
SIO_INDEX_DEL_MCAST                  = IOC_IN or IOC_VENDOR or 11;

// Values for use with SIO_RCVALL* options
 RCVALL_OFF             = 0;
 RCVALL_ON              = 1;
 RCVALL_SOCKETLEVELONLY = 2;

implementation

end.



 
Torin ©   (2004-05-05 22:18) [6]

Не работает "в обе стороны по сетевой карте" только на приём. (Ну, конечно, свои ненаправленные пакеты отлавливает но это же не в обе стороны!?)


 
Rouse_ ©   (2004-05-05 23:31) [7]

Оффтоп:
Андрей - зря ты воду взбаламутил...


 
MegaUser   (2004-05-06 04:42) [8]

#iptaf


 
-=Rezya=-   (2004-05-06 07:01) [9]


> Не работает "в обе стороны по сетевой карте" только на приём.
> (Ну, конечно, свои ненаправленные пакеты отлавливает но
> это же не в обе стороны!?)


Не знаю. У меня в XP нормально все отлавливает. У verg-а тоже все прекрасно работает по 2000Win.

> Оффтоп:
> Андрей - зря ты воду взбаламутил


???????????????????????



Страницы: 1 вся ветка

Текущий архив: 2004.06.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
1-1087166154
Mobias
2004-06-14 02:35
2004.06.27
как изменить


1-1086718467
Saracin
2004-06-08 22:14
2004.06.27
Стек вызовов (call stack)


1-1086937382
Mim1
2004-06-11 11:03
2004.06.27
пересобрать visualclx после применения UnofficialVisualCLX Pathch


6-1082355963
Piter
2004-04-19 10:26
2004.06.27
Статья про сокеты


1-1086886557
Ivolg
2004-06-10 20:55
2004.06.27
Копирование