سؤال

أحتاج لحساب كمية البايتات المرسلة والمستلمة من الشبكة من قبل مختلف التطبيقات.أولا أنا فكرت باستخدام LSP, ولكن هناك الكثير من التطبيقات التي لا تستخدم LSP على الإطلاق (SMB على سبيل المثال).هذا هو السبب في أنني قد كتبت صغيرة الشم.هذا التطبيق يعمل على IP مستوى بجمع البيانات باستخدام recvfrom.

لذلك لدي عنوان المضيف البعيد المحلية والبعيدة الموانئ.هذا هو بارد جدا, ولكن أنا أيضا بحاجة إلى PID المحلية مأخذ مالك.هل هناك أي طريقة بسيطة للحصول على هذه PID?الحل هو باستخدام GetTcpTable, GetUdpTable أو AllocateAndGetUdpExTableFromStack و AllocateAndGetTcpExTableFromStack (هناك الكثير من الاختلافات في هذه المهام بين 2k, XP, XP SP2 ويندوز فيستا) و بحث جداول النتائج ، ولكن يبدو غير لائق وغير فعالة...

هل هناك أي نوع من "GetPIDOfSocket" وظيفة ؟ القرار sholud يكون WinAPI (لا .صافي) فقط ، لغات مختلفة يمكن استخدامها ، على سبيل المثال C++, دلفي.

هل كانت مفيدة؟

المحلول

آسف أن أقول لك ، ولكن باستخدام GetTcpTable أو AllocateAndGetTcpExTableFromStack ليس الحل, انها في الواقع كيف الأخرى netstat-التطبيقات نوع العمل.AFAIK لا يوجد Win32 "GetPIDOfSocket" وظيفة الخاص بك الخيار الوحيد هو الاستطلاع باستخدام ميناء الجدول وظائف.ولكن على الأقل يمكنك رمز نفسك و لا تفرخ netstat العملية.

انظر SysInternals ج التعليمات البرمجية المصدر netstatp هنا.ليس هناك الكثير من ذلك انها تستحق نظرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top