मैं लिनक्स और मैकॉक्स पर सी में नेटवर्क आंकड़ों को पकड़ने का एक तरीका ढूंढ रहा हूं। विशेष रूप से, मुझे सिस्टम पर प्रत्येक नेटवर्क एडाप्टर से अपलोड और डाउनलोड किए गए बाइट्स की संख्या की निगरानी करने की आवश्यकता है - मुझे पैकेट निरीक्षण करने की आवश्यकता नहीं है, या प्रोटोकॉल के बीच अंतर करने की आवश्यकता नहीं है, केवल 'कुल बाइट्स' काउंटर जो मैं अंतराल पर मतदान कर सकता हूं ठीक रहो। विंडोज़ में मैं GetIfTable (नेटवर्क एडेप्टर सूचीबद्ध करने के लिए) और GetIfEntry (आंकड़े पढ़ने के लिए) के माध्यम से iphlpapi.dll लाइब्रेरी का उपयोग करके ऐसा कर सकता हूं, लेकिन मुझे लिनक्स/ओएसएक्स समकक्ष नहीं मिल रहे हैं। सी का मेरा ज्ञान काफी बुनियादी है इसलिए मैं ऐसे समाधान की सराहना करता हूं जो बहुत शामिल नहीं है। कोई भी सहायताकाफी प्रशंसनीय होगी!लिनक्स/मैक ओएसएक्स में नेटवर्क एडाप्टर आंकड़े कैसे प्राप्त करें?
उत्तर
:
मैं से बात नहीं कर सकते ओएसएक्स लेकिन लिनक्स पर/proc/net/dev पर एक नज़र डालें।
यदि आप 'बिल्ली/proc/net/dev' करते हैं तो आपको 'बाइट्स' सहित आंकड़े देखना चाहिए - इंटरफ़ेस द्वारा प्रेषित या प्राप्त डेटा के बाइट्स की कुल संख्या। आप फ़ाइल को अपने प्रोग्राम के भीतर पढ़ सकते हैं।
संपादित करें:
मैं अपने पूरे सवाल पढ़ा नहीं था। This article आपको/proc के साथ शुरू करने में मदद करनी चाहिए और/proc/net/dev पर एक अनुभाग है।
इसके अलावा, इंटरफेस सूचीबद्ध करने के लिए आप पर SIOCGIFCONF विकल्प के साथ कॉल कर सकते हैं। आप लौटाए गए डेटा के माध्यम से लूप कैसे करें पर एक सभ्य कोड उदाहरण के लिए Google कर सकते हैं। या आप इसे ऊपर उल्लिखित /proc.net/dev डेटा से बाहर खींच सकते हैं, जो आसान होना चाहिए।
के बारे में है या, जेवियर के जवाब के अनुसार, के तहत '/ sys/कक्षा/नेट/{अपने नेटवर्क इंटरफेस}/statistics', फ़ाइलें जहां' {अपने नेटवर्क इंटरफेस} 'नेटवर्क का नाम है पर देखने के इंटरफ़ेस जिसे आप देखना चाहते हैं, उदाहरण के लिए पहले ईथरनेट इंटरफ़ेस के लिए 'eth0'। sysfs ('/ sys' पर) procfs ('/proc' पर) से नया है। –
डार्विन नेटस्टैट स्रोत कोड sysctl का उपयोग करता है।
#import <Foundation/Foundation.h>
#include <sys/sysctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <net/route.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int mib[] = {
CTL_NET,
PF_ROUTE,
0,
0,
NET_RT_IFLIST2,
0
};
size_t len;
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
fprintf(stderr, "sysctl: %s\n", strerror(errno));
exit(1);
}
char *buf = (char *)malloc(len);
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
fprintf(stderr, "sysctl: %s\n", strerror(errno));
exit(1);
}
char *lim = buf + len;
char *next = NULL;
u_int64_t totalibytes = 0;
u_int64_t totalobytes = 0;
for (next = buf; next < lim;) {
struct if_msghdr *ifm = (struct if_msghdr *)next;
next += ifm->ifm_msglen;
if (ifm->ifm_type == RTM_IFINFO2) {
struct if_msghdr2 *if2m = (struct if_msghdr2 *)ifm;
totalibytes += if2m->ifm_data.ifi_ibytes;
totalobytes += if2m->ifm_data.ifi_obytes;
}
}
printf("total ibytes %qu\tobytes %qu\n", totalibytes, totalobytes);
[pool drain];
return 0;
}
यह सिम्युलेटर पर ठीक काम करता है। लेकिन डिवाइस पर त्रुटि देता है। त्रुटि है-/उपयोगकर्ताओं/praveendala/डेस्कटॉप/सब में one3/APP2/APP2/main.m: 13: 10: गंभीर त्रुटि: 'शुद्ध/route.h' फ़ाइल नहीं मिली। – virata
मैं जानता हूँ कि यह OSX के लिए है। लेकिन मुझे आईओएस डिवाइस पर चलाने की जरूरत है। कोई विचार? – virata
अच्छी तरह से किया गया। मुझे लगता है कि आप एक उद्देश्य-सी समाधान भी प्रदान करते हैं। – Armand
- 1. नेटवर्क एडेप्टर इंडेक्स कैसे प्राप्त करें?
- 2. भौतिक नेटवर्क एडेप्टर से VMware नेटवर्क एडाप्टर को अलग करें- या- वर्चुअल नेटवर्क एडाप्टर का पता लगाएं
- 3. वर्तमान में एडाप्टर व्यू में प्रदर्शित आइटम कैसे प्राप्त करें?
- 4. ओएसएक्स कनेक्टेड वाई-फाई नेटवर्क नाम प्राप्त करना
- 5. विश्वसनीय रूप से कंप्यूटर के ऑन-बोर्ड नेटवर्क एडाप्टर के मैक पते को कैसे प्राप्त करें?
- 6. विंडोज नेटवर्क एडाप्टर द्वारा उपयोग किए गए कनेक्शन नाम को कैसे प्राप्त करें?
- 7. विंडोज में उन्नत नेटवर्क एडाप्टर गुणों के लिए जंबो पैकेट कैसे सेट करें और प्राप्त/ट्रांसफर बफर कैसे सेट करें?
- 8. MATLAB में वर्तमान आंकड़े का शीर्षक प्राप्त करें?
- 9. आईट्यून्स पर मेरे ऐप आंकड़े कैसे प्राप्त करें?
- 10. एंड्रॉइड पर सीपीयू उपयोग आंकड़े कैसे प्राप्त करें?
- 11. लीवरेज आंकड़े कैसे तैयार करें?
- 12. प्रति कनेक्शन बैंडविड्थ आंकड़े प्राप्त करना
- 13. पायथन में नेटवर्क इंटरफेस कार्ड नाम कैसे प्राप्त करें?
- 14. नेटवर्क एडेप्टर अक्षम होने पर मैक पता प्राप्त करें?
- 15. ओएसएक्स 10.6.8 में xcode 4 कैसे करें?
- 16. विंडोज पर प्रति-प्रक्रिया नेटवर्क आंकड़े प्रोग्रामेटिक रूप से प्राप्त कर रहे हैं?
- 17. विंडोज 7 की नेटवर्क स्थिति प्राप्त करें
- 18. एडाप्टर
- 19. HttpURL कनेक्शन और एक विशिष्ट नेटवर्क एडाप्टर का उपयोग
- 20. मैं नेटवर्क एडाप्टर का आकलन कैसे करूं और Win32 API C++ में अपने मैक पते कैसे प्राप्त करूं?
- 21. सी ++: Vista पर नेटवर्क एडेप्टर के मैक पते प्राप्त करें?
- 22. ओएसएक्स
- 23. एंड्रॉइड आंकड़े 3 जी यातायात, कैसे?
- 24. कुशल सी ++ रनटाइम आंकड़े कैसे लागू करें
- 25. अनुरोध प्राप्त करें नेटवर्क टैब में पहल स्टैक
- 26. ओएसएक्स
- 27. IOException: नेटवर्क एडाप्टर कनेक्शन स्थापित नहीं कर सका
- 28. कनवॉल्यूशनल तंत्रिका नेटवर्क - फीचर मैप्स कैसे प्राप्त करें?
- 29. वाईफाई नेटवर्क इंटरफ़ेस का मैक पता कैसे प्राप्त करें?
से मैं अब तक क्या पाया है, तो आप दोनों प्लेटफार्मों पर आम कोड का उपयोग करने में सक्षम हो नहीं जा रहे हैं: यहाँ कुछ कोड है कि अंदर और बाहर बाइट की संख्या प्रिंट पर OSX है। ऐसा लगता है कि लिनक्स इस जानकारी को बनाए रखने के लिए फ़ाइल सिस्टम का उपयोग करता है, और फाइलों को पढ़ने के लिए सिस्टम की क्वेरी की सामान्य विधि है। ओएसएक्स पर जानकारी स्मृति और अस्पष्ट फ़ाइलों में आयोजित की जाती है। – Armand