Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.046 c
4-1084868096
Vadim X
2004-05-18 12:14
2004.06.27
Как получить время с GMT?


14-1086903527
VID
2004-06-11 01:38
2004.06.27
ещё немного о webmoney


14-1086164825
ИМХО
2004-06-02 12:27
2004.06.27
Пару слов и Стивене Кинге


8-1081360919
terra
2004-04-07 22:01
2004.06.27
Gif на форму


14-1086867361
Alex_2004
2004-06-10 15:36
2004.06.27
FastReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский