كيف يمكنني الوصول إلى netstat-مثل إيثرنت الإحصاءات من برنامج ويندوز

StackOverflow https://stackoverflow.com/questions/221181

سؤال

كيف يمكنني الوصول إلى إيثرنت الإحصاءات من 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

انظر مجموعات 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

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