Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Как узнать время создания TCP соединения Добавлено: 31.03.09 13:34  

Автор вопроса:  Arvitaly | Web-сайт: okazani.ru | ICQ: 301746136 
Использую функцию AllocateAndGetTcpExTableFromStack, но в ней нету времени создания, мб кто знает

Ответить

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

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 31.03.09 17:24
GetExtendedTcpTable TCP_TABLE_OWNER_MODULE_ALL MIB_TCPROW_OWNER_MODULE.liCreateTimestamp

Ответить

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



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #2
Добавлено: 31.03.09 19:23
хм спасибо

Ответить

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



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #3
Добавлено: 31.03.09 20:38
Sharp, а может скажешь уж заодно

Ответить

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



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #4
Добавлено: 31.03.09 20:39
Sharp, а может скажешь уж заодно, liCreateTimestamp мне возвращает вот такие значения (А Я то Думал будет что-то типа число микросекунд с 1970 года)))
2

0

13579

0

28680

1164

5

-1207527597

22020

16777343

9989

0

5

16777343

30469

16777343

17648

1284

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 31.03.09 23:55
LARGE_INTEGER это 8-байтовое объединение, равное количеству 100-наносекундных интервалов с 1 января 1601 года.

  1. string ll2date(LARGE_INTEGER ts)
  2. {
  3. SYSTEMTIME st;
  4. FileTimeToSystemTime((FILETIME *) &ts, &st);
  5. return (boost::format("%04d/%02d/%02d %02d:%02d:%02d.%03d") %
  6. st.wYear % st.wMonth % st.wDay % st.wHour % st.wMinute % st.wSecond % st.wMilliseconds).str();
  7. }


Учти еще, что порт указан в сетевом порядке байт в младшем слове поля структуры.

Ответить

Номер ответа: 6
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #6
Добавлено: 01.04.09 00:35
да это я все разобрался спасибо, НО уже очень долго пытаюсь понять как на VB 6 объявить тип ULONGLONG или хотя бы его размер

Ответить

Номер ответа: 7
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #7
Добавлено: 01.04.09 00:38
Вроде длина должна быть такой же, что и у large_integer, т.е. 8, но почему то не выходит

Ответить

Номер ответа: 8
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #8
Добавлено: 01.04.09 00:49
  1. Private Type LARGE_INTEGER
  2.     lowpart As Long
  3.     highpart As Long
  4. End Type

С этим типом все норм

  1. Private Type MIB_TCPROW_OWNER_MODULE
  2.     dwState As Long
  3.  
  4.     dwLocalAddr As Long
  5.  
  6.     dwLocalPort As Long
  7.  
  8.     dwRemoteAddr As Long
  9.  
  10.     dwRemotePort As Long
  11.  
  12.     dwOwningPid As Long
  13.     
  14.     liCreateTimestamp As LARGE_INTEGER
  15.     OwningModuleInfo As LARGE_INTEGER
  16.     
  17. End Type

Исходя из того, что длина последней переменной тоже 8 объявляю ее также LARGE_INTEGER

  1. Dim lngSize As Long, nRet As Long
  2.  
  3.     lngSize = 4
  4.  
  5.     nRet = GetExtendedTcpTable(0&, lngSize, 1, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0)
  6.    
  7.     ReDim pTablePtr(lngSize - 1)
  8.  
  9.  
  10.     nRet = GetExtendedTcpTable(pTablePtr(0), lngSize, 1, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0)



тут тоже все в порядке, получаю в pTablePtr(0) количество TCP соединений
  1. Dim tcpTable As MIB_TCPROW_OWNER_MODULE
  2.  
  3. For i = 0 To nRows ' read 24 bytes at a time
  4.     CopyMemory tcpTable, pTablePtr(0 + pDataRef + 8), LenB(tcpTable)
  5.     f.text1.Text = f.text1.Text & vbCrLf & " " & " " & tcpTable.dwState & " " & tcpTable.dwLocalAddr & " " & tcpTable.dwLocalPort & " " & tcpTable.dwOwningPid & " " & tcpTable.dwRemoteAddr & " " & tcpTable.dwRemotePort & " " & tcpTable.liCreateTimestamp.highpart & " " & tcpTable.liCreateTimestamp.lowpart
  6.         pDataRef = pDataRef + LenB(tcpTable)
  7.  
  8.         DoEvents
  9.  
  10. Next i

а вот тут уже невпорядке(((

Ответить

Номер ответа: 9
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #9
Добавлено: 01.04.09 01:45
И почему-то не для всех соединений видно время

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 01.04.09 09:00
По таким мелким кускам кода диагностировать трудно, но For i = 0 To nRows, наверно, лучше заменить на For i = 0 To nRows-1. Ну и происхождение 0 + pDataRef + 8 не слишком понятно.

Ответить

Номер ответа: 11
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #11
Добавлено: 01.04.09 10:06
Ну и происхождение 0 + pDataRef + 8 не слишком понятно.

Это смещение, в первых 4 записано количество TCP соединений, а во вторых 4 почему то 0 (вернее я не знаю какая там может быть информация).

Так все получилось оказывается, последняя переменная ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE] занимает 128 байт. Правда не знаю как ее объявить
  1. pDataRef = pDataRef + LenB(tcpTable)+128

поэтому сделал так.
Остался единственный момент - время показывается не у всех соединений, у многих просто 0 0

Ответить

Номер ответа: 12
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #12
Добавлено: 01.04.09 12:04
Вообще время показывается только для состояния Listening, а есть ли возможность узнать время создания для соединений с другим состоянием Established например

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #13
Добавлено: 01.04.09 21:45
Вроде нет.

Ответить

Номер ответа: 14
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #14
Добавлено: 01.04.09 22:26
Ладно, спасибо за все! В принципе засечь время создания можно, но прога должна быть включена всегда. Просто в файрволах это реализовано - интересно как...

Ответить

Страница: 1 |

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



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