netstat와 유사한 프로그램을 짜려고 합니다

맹고이의 이미지

로컬호스트의 포트 상태를 알아내는 간단한 프로그램을 만들어 보려고 합니다. netstat 소스를 분석중이긴 한데 오랜만에 코딩을 해서인지, 마음만 급하고 봐도 잘 모르겠습니다. LISTEN, ESTABLISHED, CLOSED 상태를 구분하려면 어떤식으로 해야되는지 중요한 함수나 원리라도 알려주셨으면 좋겠습니다. 그럼...

익명 사용자의 이미지

1) # more /proc/net/tcp
....
음 쿵~

2) # vi netstat.c
...
num = sscanf(line,
"%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %ld %512s\n",
&d, local_addr, &local_port, rem_addr, &rem_port, &state,
&txq, &rxq, &timer_run, &time_len, &retr, &uid, &timeout, &inode, more);
...
음 쿵~
...
enum {
TCP_ESTABLISHED = 1,
TCP_SYN_SENT,
TCP_SYN_RECV,
TCP_FIN_WAIT1,
TCP_FIN_WAIT2,
TCP_TIME_WAIT,
TCP_CLOSE,
TCP_CLOSE_WAIT,
TCP_LAST_ACK,
TCP_LISTEN, 음 0A면 10이니까,..이거군
TCP_CLOSING /* now a valid state */
};
...
음 쿵~