Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Нужна помощь специалистов по сетевым технологиям. Добавлено: 11.08.05 17:43  

Автор вопроса:  mmv software | Web-сайт: www.alexfreesoft.ru
Нужна помощь специалистов по сетевым технологиям.

1. Как подсчитать количество байт переданных \ принятых через определённый сетевой интерфейс с помощь Sockets.
2. И как можно подсчитывать байты преданные \ принятые в глобальную сеть (Интернет) исключая локальные байты (локальная сеть)
Пожалуйста напишите небольшой примерчик, так сказать саму суть.
Буду очень благодарен

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #1
Добавлено: 11.08.05 19:12
1. Есть несколько путей, Kernel Level Driver (что на ВБ невозможно), Перехват АПИ функций (вполне возможно на С++ + ВБ) и юзая RAW сокеты, но используя последний вариант можно просматривать/подсчитывать только входящий трафик на интерфейсе. Различные каунтеры винды не будем обсуждать....

2. Ну, это уже фильтр по IP, реализовать несложно...

О примерах: если найду, вышлю свой примерчик для входящего трафика на RAW сокетах. Ты мыло оставь

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 11.08.05 20:00
от есть пример DaSharm'a

это юзконтрол


'-------------------------------------------------------------------------------------
'  88888888  88888       8888     8888888       | Автор и програмер : Ракочий Назар   |
'     88     88   8     88  88    88            | Ник               : DaSharm         |
'     88     88888      888888    8888          | Сайт              : localhost.co.nr |
'     88     88  88    88    88   88            | E-mail            : dasharm@mail.ru |
'     88     88   88  88      88  88       MON  | ICQ               : 2068093         |
'-------------------------------------------------------------------------------------
' 100% Украинский продукт
' 30.04.2004 - Украина - Тернополь
Private Type WSAData
    wVersion       As Integer
    wHighVersion   As Integer
    szDescription  As String * 257
    szSystemStatus As String * 129
    iMaxSockets    As Integer
    iMaxUdpDg      As Integer
    lpVendorInfo   As Long
End Type
Private Type sockaddr_in
    sin_family As Integer
    sin_port As Integer
    sin_addr As Long
    sin_zero As String * 8
End Type
Private Type hostent
    hName     As Long
    hAliases  As Long
    hAddrType As Integer
    hLength   As Integer
    hAddrList As Long
End Type
Event Monitor(Value As Long)
Private Declare Function gethostname Lib "ws2_32.dll" (ByVal MyName As String, ByVal MyName_len As Long) As Long
Private Declare Function gethostbyname Lib "wsock32" (ByVal hostname As String) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (xDest As Any, xSource As Any, ByVal nbytes As Long)
Private Declare Function bind Lib "wsock32.dll" (ByVal s As Integer, addr As sockaddr_in, ByVal namelen As Integer) As Integer
Private Declare Function setsockopt Lib "wsock32.dll" (ByVal s As Long, ByVal Level As Long, ByVal optname As Long, optval As Any, ByVal optlen As Long) As Long
Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
Private Declare Function recv Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal flags As Long) As Long
Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVR As Long, lpWSAD As WSAData) As Long
Private Declare Function htons Lib "wsock32.dll" (ByVal hostshort As Long) As Integer
Private Declare Function socket Lib "wsock32.dll" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long
Private Declare Function closesocket Lib "wsock32.dll" (ByVal s As Long) As Long
Private Declare Function WSAAsyncSelect Lib "wsock32.dll" (ByVal s As Long, ByVal hwnd As Long, ByVal wMsg As Long, ByVal lEvent As Long) As Long
Private Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String) As Long
Private Declare Function WSAIoctl Lib "ws2_32.dll" (ByVal s As Long, ByVal dwIoControlCode As Long, lpvInBuffer As Any, ByVal cbInBuffer As Long, lpvOutBuffer As Any, ByVal cbOutBuffer As Long, lpcbBytesReturned As Long, lpOverlapped As Long, lpCompletionRoutine As Long) As Long
Private Const FD_READ = &H1&
Private Const FD_WRITE = &H2&
Private Const FD_CONNECT = &H10&
Private Const FD_CLOSE = &H20&
Dim s As Long, BindIP As String
Public Function StartMonitor() As Boolean
 Dim Timing As Long, so As sockaddr_in
 so.sin_family = 2
 so.sin_port = htons(8054)
 so.sin_addr = inet_addr(GetReal)
 s = socket(2, 3, 0)
 Timing = 5000
 If setsockopt(s, &HFFFF&, &H1006, (Timing), 4) = -1 Then MsgBox "Setsock failed": GoTo ExxLabel
 If bind(s, so, Len(so)) = -1 Then MsgBox "Bind failed": GoTo ExxLabel
 Dim lngInBuffer As Long
 Dim lngBytesReturned As Long
 Dim lngOutBuffer As Long
 lngInBuffer = 1
 If WSAIoctl(s, &H98000001, lngInBuffer, Len(lngInBuffer), lngOutBuffer, Len(lngOutBuffer), lngBytesReturned, ByVal 0, ByVal 0) = -1 Then MsgBox "Iotcl failed": GoTo ExxLabel
 If WSAAsyncSelect(s, UserControl.hwnd, &H202, FD_READ) = -1 Then MsgBox "WS failed": GoTo ExxLabel
StartMonitor = True
Exit Function
ExxLabel:
StartMonitor = False
End Function
Private Function GetIPfromNetName(NetName As String) As String
 Dim gv As Long
 Dim an As hostent
 Dim IPaddr As Long
 gv = gethostbyname(Trim(NetName))
 If gv = 0 Then Exit Function
 CopyMemory an, ByVal gv, Len(an)
 CopyMemory IPaddr, ByVal an.hAddrList, 4
 Dim tmpIPAddr() As Byte
 ReDim tmpIPAddr(1 To an.hLength)
 Dim sIPAddr As String
 CopyMemory tmpIPAddr(1), ByVal IPaddr, an.hLength
 For i = 1 To an.hLength
 sIPAddr = sIPAddr & tmpIPAddr(i) & "."
 Next
 If Right(sIPAddr, 1) = "." Then sIPAddr = Left(sIPAddr, Len(sIPAddr) - 1)
 GetIPfromNetName = sIPAddr
End Function
Private Sub UserControl_Initialize()
 Dim ws As WSAData
 WSAStartup &H101, ws
End Sub
Private Function GetReal() As String
Dim MyName As String * 255
 gethostname MyName, 255
 GetReal = GetIPfromNetName(MyName)
End Function
Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
 Dim ReadBuffer(1498) As Byte
 Dim Bytes As Long
 Bytes = recv(s, ReadBuffer(0), 1498, 0)
 If Bytes > 0 Then RaiseEvent Monitor(Bytes)
End Sub
Private Sub UserControl_Resize()
 Height = 465
 Width = 465
End Sub


юзать так:
форма:

' DaSharm (www.localhost.co.nr)
' не пытайтесь запустить этот пример когда вы не подключены к сети.
' Дело в том, что контрол не может быть привязан к интерфейсу 127.0.0.1
' и будет показывть ошибку iotcl  failed
Private Sub Form_Load()
TrafMon1.StartMonitor
End Sub

Private Sub TrafMon1_Monitor(Value As Long)
' смотрим на caption формы, там будет число принятых байт
Caption = Val(Caption) + Value
End Sub


ещё кое что есть...

http://www.webfile.ru/453671

да и вообще поройся в поисковиках, думаю найдёшь что-то

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 11.08.05 21:57
Почему не стоит обсуждать каунтеры Винды? Дай ссылку или док.

Ответить

Номер ответа: 4
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #4
Добавлено: 11.08.05 22:27
Потому, что там с интерфейсами траблы (АДСЛ модемы и т. п.)

Ответить

Номер ответа: 5
Автор ответа:
 mmv software



Вопросов: 1
Ответов: 1
 Web-сайт: www.alexfreesoft.ru
 Профиль | | #5
Добавлено: 14.08.05 11:12
Хочу всех поблагодарить за помощь, это единственный форум, где мне посоветовали, что-то полезное и по теме. Мой email mmvsoftware@mail.ru
На счётчиках производительности у меня как раз и всё написано, но как правильно заметил DaSharm модемные интерфейсы не видит. А для удалённого соединения счётчики считают не относительно сетевого интерфейса, а относительно VPN (я имею ввиду категорию - порт RAS)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам