2011-12-22 5 views
3

Linux에서 사용 된 포트 및 해당 상태는 어떻게 얻을 수 있습니까? 기본적으로, 그 모든 것 netstat 할 수 있지만 C?사용 된 포트 및 상태 가져 오기

+3

netstat이 C로 작성되지 않았다고 생각합니까? http://src.gnu-darwin.org/src/usr.bin/systat/netstat.c.html 또는 code.turnkeylinux.org/busybox/networking/netstat.c – fvu

+0

또한'netstat'가 이미 여러분에게 왜 그것을 다시 작성해야합니까? – dreamlax

+0

나는 netstat을 다시 쓰려고하지 않고 단지 내 자신의 프로그램 중 하나에서 비슷한 기능을 가지고있다. – Doddy

답변

3

netstat 실행시 strace을 실행하면 시스템 호출자와 해당 인수가 표시됩니다.

$ strace netstat 
... 
open("/proc/net/tcp6", O_RDONLY)  = 3 
open("/proc/net/udp", O_RDONLY)   = 3 
... 

이 종종 프로그램을하고있다거나 통화가하게하고 당신이 필요로하는 모든가 볼을 부르는 발견하는 경우 때때로 소스에서 찾고보다 쉽게 ​​할 수있는 것을 알 수있는 좋은 방법입니다 맨 페이지.

1

글쎄, "netstat이 할 수있는 모든 것"은 netstat으로 시작할 수 있습니다. 소스 코드는 여기에 있습니다 :

http://net-tools.git.sourceforge.net/git/gitweb.cgi?p=net-tools/net-tools;a=blob;f=netstat.c;h=f046f09162689f258f8920c1c2af27e01cdc77f2;hb=HEAD

netstat가하는 일의 대부분은, 그것은 /proc 파일 시스템에서 가져 주목해야한다

; *_do_one 루틴은 "흥미로운"용기를 대부분 가지고 있습니다.

+0

나는 그것이 순진한 질문이 아니란 뜻으로, 나는 그저 일련의 메소드가 있기를 바랐지만'/ proc'에서 파일을 읽는다는 사실에 놀랐다 ... 나쁜 전술이 아니다. 프로그램을 위해서? 예를 들어'/ proc/uptime'을 읽지 않고 가동 시간을 얻으려면'sysinfo()'를 사용합니다. – Doddy

+1

@bean :'/ proc/uptime'은 표준 * 파일 *이 아니지만 가동 시간 (텍스트 형식)을 제공하는 커널의 장치 드라이버에 직접 액세스한다는 것을 기억하십시오. '/ proc'의 나머지 부분도 같은 방식으로 작동합니다. –

+0

일반적으로'/ proc'와'/ sys' 파일 시스템은 많은 Linux 커널 서브 시스템에 선호되는 인터페이스입니다. 중복 기능을 제공하는 라이브러리 함수가있는 경우, 종종 (항상 그런 것은 아님) libc에 proc 액세스에 대한 래퍼로 구현됩니다. 나는'sysinfo'가 그런 호출이지만 man 페이지가 proc (5)에 링크되어 있다면, 알지 못합니다. – BRFennPocock

관련 문제