TCP 3 way handshake 과정에서 최종 ACK가 된 패킷의 IP를 수집할려면 어떻게 해야 하나요?
글쓴이: 최영식 / 작성시간: 목, 2006/07/13 - 6:42오후
리눅스의 TCP/IP에 대해 공부한지 얼마안된 초보 프로그래멉니다.
질문 자체도 두서가 없는 것 같지만, 조금 급한것이라서 올려봅니다.
궁금한 것은 먼저, TCP 3-way handshake 과정에서 최종 접속이 결정되기 위해서는
클라이언트로 부터 최종 ACK 신호를 받아야 하는걸로 알고 있는데
"이렇게 최종 응답을 보내준 클라이언트의 주소(IP)를 파일로 관리할려고 합니다."
단순히 tcpdump와 같은 tool을 쓰면 간단하겠지만
제가 필요한것은 실시간 저장되는 방법으로
"리눅스 커널을 수정해서 실시간 접속되는 클라이언트 주소를 특정파일 혹은 메모리에 저장하는 방법입니다."
아무래도 IP나 TCP쪽의 소스를 수정해야 할 것같은데
어떤 부분부터 접근해야 할지 난감합니다.
어떤 정보라도 감사하겠습니다. 관련사이트도 좋고요.
혹시 경험이 있으신 분들의 의견 부탁드립니다.
(참고로 linux kernel version 2.4.XX 를 사용중입니다.)
Forums:
iptables를 써보세요.
psad였나, 보안 패키지를 깔려니까 iptables로 LOG 동작을 활성화하라고 하더군요. 예문 주는 거만 적용하고 자세히 살펴보진 않았습니다만, 아마 모든 패킷을 기록하는 것 같았습니다. 덕분에 하드에 마구 써대서 부하가 장난 아니었지요... (무념)
아마 적당한 조건에 맞춰서 LOG를 남기게 하면 될 겁니다. man iptables 해서 LOG를 찾아보세요.
음... 잘은 모르겠지만
잘은 모르겠지만 패킷을 일일이 모니터링해서 3-way의 세번째 를 찾는것은 부하면에서도 어려울것 같습니다.
불현듯 난 생각인데
TCP 스테이트 다이어그램있지않습니까?
3way의 마지막 패킷을 전송하거나 받으면 그즉시 state가 변경될꺼같은데,
차라리 그부분의 TCP 소스를 수정해서 추가하는 부분을 넣어주는것은 어떨까요?
ps)
많은 유틸리티에서 보여주는 연결되어있는 TCP상태하고 3 번째 ACK를 받을때의 상태하고 다른지 잘 모르겠네요.
답변 감사합니다.
KZ님 처럼 할까도 생각했었는데
TCP의 소스 부분을 수정하는 방법을 고려하고 있습니다.
yschoi님 처럼 그 부분부터 살펴봐야겠네요...
왠지 무척 어려울듯.... T.T
즐거운 주말 되세요....^^
cat /proc/net/tcp
cat /proc/net/tcp 하시거나,
netfilter가 포함된 커널이면, cat /proc/net/ip_conntrack 해 보세요.
TCP 이고, ESTABLISH 이면, 3-way HS 가 끝난 세션이라고 보시면 됩니다.
2005년 내 인생의 전환점.
댓글 달기