Linux 및 MacOSX에서 C 네트워크 통계를 얻는 방법을 찾고 있습니다. 특히, 시스템의 각 네트워크 어댑터에서 업로드 및 다운로드 한 바이트 수를 모니터링해야합니다. 패킷 검사를 수행하거나 프로토콜을 구분할 필요가 없습니다. 간격을두고 폴링 할 수있는 '총 바이트 수'카운터 좋아. Windows에서는 GetIfTable (네트워크 어댑터 목록 표시) 및 GetIfEntry (통계 읽기)를 통해 iphlpapi.dll 라이브러리를 사용하여이 작업을 수행 할 수 있지만 Linux/OSX에 해당하는 항목을 찾을 수 없습니다. C에 대한 지식은 상당히 기본적인 것이므로 너무 복잡하지 않은 해결책을 고맙게 생각합니다. 어떤 도움을 많이 주시면 감사하겠습니다!linux/Mac OSX에서 네트워크 어댑터 통계를 얻는 방법은 무엇입니까?
리눅스에답변
내가 말할 수 없습니다 OSX하지만 리눅스에서는/proc/net/dev을 살펴보십시오.
'cat/proc/net/dev'를 실행하면 인터페이스에서 전송하거나 수신 한 총 바이트 수인 '바이트'를 포함한 통계를 볼 수 있습니다. 자신의 프로그램 내에서 파일을 읽을 수 있습니다.
편집 :
나는 당신의 모든 질문을 읽어 보지 않았다. This article은/proc을 시작하는 데 도움이되며/proc/net/dev에 대한 섹션이 있습니다.
또한 인터페이스를 나열하려면 ioctl을 SIOCGIFCONF 옵션과 함께 호출 할 수 있습니다. 반환 된 데이터를 반복하는 방법에 대한 괜찮은 코드 예를 Google에서 얻을 수 있습니다. 또는 위에서 언급 한 /proc.net/dev 데이터에서 간단히 빼낼 수 있습니다. 더 쉬워야합니다.
또는 하비에르의 대답에 따라'/ sys/class/net/{네트워크 인터페이스}/통계'파일에서 {{네트워크 인터페이스}}는 네트워크 이름입니다 당신이보고 싶은 인터페이스, 예. 첫 번째 이더넷 인터페이스의 경우 'eth0'. sysfs ('/ sys')는 procfs ('/ proc'에)보다 새로운 것입니다. –
Darwin netstat 소스 코드는 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;
}
- 1. 원격 PC의 네트워크 통계를 얻는 방법
- 2. Android에서 CPU 사용 통계를 얻는 방법은 무엇입니까?
- 3. 열에 통계가있는 경우 통계를 얻는 방법은 무엇입니까?
- 4. 네트워크 어댑터 재설정을위한 C#
- 5. FUSE 형 가상화 네트워크 어댑터?
- 6. 장치 네트워크 정보를 얻는 방법은 무엇입니까? (안드로이드)
- 7. PHP를 사용하여 SEO 관련 사이트 통계를 얻는 방법은 무엇입니까?
- 8. iframe이있는 웹 위젯을 사용하는 웹 사이트의 통계를 얻는 방법은 무엇입니까?
- 9. Windows에서 인터페이스 별 통계를 얻는 방법
- 10. PHP에서 시스템 통계를 얻는 방법
- 11. iPhone에서 시스템 통계를 캡처하는 방법은 무엇입니까?
- 12. 트래커를 기반으로 급류 통계를 수집하는 방법은 무엇입니까?
- 13. 카운터 통계를 유지하는 가장 좋은 방법은 무엇입니까?
- 14. SQLAlchemy 테이블에서 그래프와 통계를 생성하는 방법은 무엇입니까?
- 15. 모든 mysql 통계를 재설정하는 방법은 무엇입니까?
- 16. BitTorrent swarm에서 통계를 수집하는 방법은 무엇입니까?
- 17. Linux 시스템 모니터가 프로세스 통계를 얻는 방법
- 18. 네트워크 appliction에 대한 사용 권한을 얻는 방법은 무엇입니까?
- 19. 매핑을 위해 사용 가능한 네트워크 드라이브를 얻는 방법은 무엇입니까?
- 20. 사용 가능한 GSM 네트워크 목록을 얻는 방법은 무엇입니까?
- 21. 사용 가능한 네트워크 공급자 목록을 얻는 방법은 무엇입니까?
- 22. 루프백 어댑터 감지
- 23. 테이블 어댑터 목록을 검색하는 방법은 무엇입니까?
- 24. mac osx에서 교착 상태를 디버깅하는 방법은 무엇입니까?
- 25. OSX에서 NSWindow의 픽셀 버퍼에 액세스하는 방법은 무엇입니까?
- 26. osx에서 가상 키보드를 만드는 방법은 무엇입니까?
- 27. OSX에서 D-trace로 명령 인수를 얻는 방법
- 28. "어댑터"또는 "어댑터"?
- 29. "어댑터 이름"이란 무엇입니까?
에서 : 여기 OSX에에서 밖으로 바이트 수를 출력하는 코드이다. 리눅스는이 정보를 유지하기 위해 파일 시스템을 사용하고 시스템이 파일을 읽는 일반적인 쿼리 방법을 사용합니다. OSX에서는 정보가 메모리와 애매한 파일에 저장됩니다. – Armand