كيف يمكنني الوصول إلى netstat-مثل إيثرنت الإحصاءات من برنامج ويندوز
-
03-07-2019 - |
سؤال
كيف يمكنني الوصول إلى إيثرنت الإحصاءات من C/C++ كود مثل netstat -e?
Interface Statistics
Received Sent
Bytes 21010071 15425579
Unicast packets 95512 94166
Non-unicast packets 12510 7
Discards 0 0
Errors 0 3
Unknown protocols 0
المحلول
مكان جيد للبدء إحصاءات الشبكة سيكون GetIpStatistics الاتصال في ويندوز IPHelper وظائف.
هناك اثنين من الأساليب الأخرى التي هي ربما أكثر المحمولة:-
- SNMP.يتطلب SNMP إلى تمكين على جهاز الكمبيوتر ، ولكن من الواضح أنه يمكن أن يكون استخدامها لاسترداد إحصاءات أجهزة الكمبيوتر عن بعد أيضا.
- أنبوب إخراج 'netstat' في التطبيق الخاص بك ، تنتشلها القيم من النص.
نصائح أخرى
WMI سوف توفر تلك القراءات:
SELECT * FROM Win32_PerfFormattedData_Tcpip_IP
SELECT * FROM Win32_PerfFormattedData_Tcpip_TCP
SELECT * FROM Win32_PerfFormattedData_Tcpip_UDP
SELECT * FROM Win32_PerfFormattedData_Tcpip_ICMP
SELECT * FROM Win32_PerfFormattedData_Tcpip_Networkinterface
هذه الفئات هي متوفرة على ويندوز XP أو أحدث.قد تضطر إلى الاستقالة إلى مطابقة "Win32_PerfRawData" الطبقات على ويندوز 2000 و أكثر قليلا من الرياضيات قبل أن تتمكن من عرض الإخراج.
البحث وثائق على كل منهم في MSDN.
اسمحوا لي أن الإجابة على نفسي كما أنا سألت نفس في منتدى آخر.
WMI جيدة ، ولكن من الأسهل لاستخدام IpHlpApi بدلا من ذلك:
#include <winsock2.h>
#include <iphlpapi.h>
int main(int argc, char *argv[])
{
PMIB_IFTABLE pIfTable;
MIB_IFROW ifRow;
PMIB_IFROW pIfRow = &ifRow;
DWORD dwSize = 0;
// first call returns the buffer size needed
DWORD retv = GetIfTable(pIfTable, &dwSize, true);
if (retv != ERROR_INSUFFICIENT_BUFFER)
WriteErrorAndExit(retv);
pIfTable = (MIB_IFTABLE*)malloc(dwSize);
retv = GetIfTable(pIfTable, &dwSize, true);
if (retv != NO_ERROR)
WriteErrorAndExit(retv);
// Get index
int i,j;
printf("\tNum Entries: %ld\n\n", pIfTable->dwNumEntries);
for (i = 0; i < (int) pIfTable->dwNumEntries; i++)
{
pIfRow = (MIB_IFROW *) & pIfTable->table[i];
printf("\tIndex[%d]:\t %ld\n", i, pIfRow->dwIndex);
printf("\tInterfaceName[%d]:\t %ws", i, pIfRow->wszName);
printf("\n");
printf("\tDescription[%d]:\t ", i);
for (j = 0; j < (int) pIfRow->dwDescrLen; j++)
printf("%c", pIfRow->bDescr[j]);
printf("\n");
...
Szia,
من http://en.wikipedia.org/wiki/Netstat
على منصة ويندوز ، netstat يمكن استرجاع المعلومات من قبل واصفا GetTcpTable ، GetUdpTable في وظائف مساعد IP API, أو IPHLPAPI.DLL.المعلومات عاد يشمل المحلية والبعيدة IP عناوين المحلية والبعيدة الموانئ ، (على GetTcpTable) TCP رموز الحالة.في إضافة إلى سطر الأوامر netstat.exe أداة الذي يأتي مع ويندوز, هناك واجهة المستخدم الرسومية المستندة إلى netstat البرامج المتاحة.على منصة ويندوز ، هذا الأمر متوفر فقط إذا كان الإنترنت بروتوكول (TCP/IP) بروتوكول تثبيت عنصر في خصائص محول شبكة الاتصال في اتصالات شبكة الاتصال.
MFC العينة في CodeProject: http://www.codeproject.com/KB/applications/wnetstat.aspx
قد تجد feasable عداد الأداء WMI, مثلا Win32_PerfRawData_Tcpip_NetworkInterface.
انظر مجموعات Google ، الأصلي netstats البرمجية المصدر وقد تم نشر عدة مرات (win32 api)
كما الإجابات أعلاه توحي ، WMI عدادات الأداء يحتوي على بعض البيانات.فقط أن ندرك أن في الإصدارات الأحدث من ويندوز أرجعها عدادات موزعة في v4 مقابل v6 حتى الاستعلامات هي:
حدد * من Win32_PerfFormattedData_Tcpip_IPv4
حدد * من Win32_PerfFormattedData_Tcpip_TCpv4
حدد * من Win32_PerfFormattedData_Tcpip_UDpv4
حدد * من Win32_PerfFormattedData_Tcpip_ICmp
حدد * من Win32_PerfFormattedData_Tcpip_IPv6
حدد * من Win32_PerfFormattedData_Tcpip_TCpv6
حدد * من Win32_PerfFormattedData_Tcpip_UDpv6
حدد * من Win32_PerfFormattedData_Tcpip_ICmpv6