Linux netstat показує розміри черги для надсилання та отримання.
Як отримати цю інформацію в Windows, зокрема Server 2003?
Linux netstat показує розміри черги для надсилання та отримання.
Як отримати цю інформацію в Windows, зокрема Server 2003?
Відповіді:
(це трохи мозковий дамп)
Переглядаючи пару версій джерела netstat, схоже, що шукану інформацію запитують безпосередньо з ядра (/ proc / net / ...), а не через дзвінки, пов’язані з сокетом, які мають еквіваленти Windows. Якщо ви дійсно налаштовані на це, я б подивився, як це отримується в netstat, і побачу, що ви можете знайти, що забезпечує щось еквівалентне.
Ви, мабуть, варто переглянути інформацію про рівень драйверів на ndis.com ( специфікація мережевого драйвера) та PCAUSA.com , оскільки це, можливо, найкраще знайти цю інформацію в Windows.
Я не вірю, що getsockopt () або більша частина арени Winsock допоможуть вам отримати корисні місця, але якщо ви хочете піти в цьому напрямку, перегляньте інформацію про MSDN Winsock, а також ознайомтеся з поширеними запитаннями програміста Winsock .
Для вхідних даних ви можете отримати щось корисне з функції ioctlsocket () за допомогою FIONREAD, щоб отримати кількість читабельних даних для сокета; можливо, ви не зможете отримати це через процеси, і залежно від типу даних він може повертати інформацію лише для першого блоку даних, а не для всієї черги, якщо в черзі є більше одного елемента.
У цьому контексті ви можете викопати "відставання", але більшість того, що я побачив, здавалося, стосується встановлення максимального розміру для боротьби з паводками SYN, а не насправді з того, наскільки великий фактичний відставання.
Якщо ви дійсно налаштовані, ви, можливо, зможете щось зробити зі своїм власником багатошарових послуг , але це дивна та негарна дорога, повна небезпеки, і я пропоную триматися подалі від неї.
ОНОВЛЕННЯ: Після роздумування трохи більше, я, безумовно, думаю, що ви повинні переглянути запити OID OID. Пошук найбільш актуальної для вас інформації залишається вправою між вами, MSDN та TechNet.
Це питання старе, але я хотів додати трохи інформації. Це досить високий результат пошуку в Google.
Наскільки я можу сказати, немає способу це зробити, але якщо хтось може більше викопати та розробити дійсну альтернативу, це буде дуже вдячно!
Як @Fencepost вказував у своїй відповіді, ви можете спробувати запитувати OID NDIS. Найбільш релевантний NDIS OID, який я знайшов, є OID_GEN_TRANSMIT_QUEUE_LENGTH
Більшість OID NDIS відображаються у класах WMI, ви можете перелічити їх у шкалах повноважень
Get-WmiObject -Namespace root\wmi -List | Where-Object {$_.name -Match "MSNdis" } | Sort-Object
але, здається, немає жодної для довжини черги передачі.
@Chris J згадав мережевий інтерфейс \ довжина черги виводу. Це значення можна отримати в командному рядку за допомогою typeperf .
typeperf "\Network Interface(*)\Output Queue Length" -sc 1
Але значення завжди становить 0: http://support.microsoft.com/kb/822226
Windows відслідковує цю інформацію лише в програмному забезпеченні драйвера NIC, і це лише пакети, що стоять у черзі на NIC, і не розрізняє, що ставиться в чергу в сокет.
Якщо ви хочете виконати налагодження мережі в командному рядку, будь-які лічильники, які ви знайдете в perfmon, можна запитувати за допомогою typeperf або logman .
Те, що ви хочете, можуть бути результатами викликів функції WinSock API getsockopt
:
SO_RCVBUF
Загальний простір буфера на сокет, зарезервований для прийому. Це не пов'язано SO_MAX_MSG_SIZE
і не обов'язково відповідає розміру вікна прийому TCP.
SO_SNDBUF
Загальний простір буфера на сокет, зарезервований для відправки. Це не пов’язано з SO_MAX_MSG_SIZE
і не обов'язково відповідає розміру вікна надсилання TCP.
Проблема полягає в тому, що можна попросити розетки, чию ручку ви знаєте. Запит ззовні здається важким, ознайомтеся з інструментом TcpView для sysinternals . Марк Русинович - справді тріщина, і навіть він не надає інформацію у своєму інструменті. Я впевнений, що він додав би стовпець, якби мав на меті легко отримати значення ...
Я думаю, що якийсь драйвер ядра міг би допомогти просвердлити систему, але не знайшов жодного доступного інструменту. Розміри можна встановлювати на базі сокета, щоб глобальні значення не мали значення ...
Подивіться тут: http://support.microsoft.com/kb/224829 .