TCP같은 경우에는 seq값과 ack값, 그리고 데이터 길이를 이용해서 예측하는 next_seq 등을 이용하셔야 합니다.
그러나 실제로 모든 데이터를 그렇게 합치는 것은 매우 어렵습니다.
테스트 환경이면 모르지만, 왠만한 네트워크에서는 세션의 수가 많아지는데,
이에 관한 모든 데이터를 메모리에 가지고 있다가 합쳐줄려면 메모리가 무지 많아야 겠죠.
대충 그 부하는 ethereal에서 트래픽을 캡처하신 다음에 패킷들을 순서대로 정리해서 보여주는 과정을 보시면 됩니다.
그리고 tool 메뉴에서 follow tcp stream인가 하는 plugin을 실행시켜 보시면
데이터만 추출해서 합치는게 어느 정도 부하가 걸리는지 대충 짐작하실 수 있을 겁니다.
음...
안녕하세요? 날씨가 참~ 쌀쌀하네요. ㅜㅜ;
혹시 수신받은 TCP세그먼트의 DATA를 합치는것을 말씀하시는 건가요?
TCP/IP 소프트웨어가 해줍니다. 현재 어떠한 환경에서 프로그래밍을 하시는
지요? 캡쳐 라이브러리를 사용하는건가요? 아니면 로우소켓으로 직접 구현을
하시는 건가요?
예 TCP/IP에선 비슷한 방식으로 조합합니다. 순서번호가 필요한 이유죠.
음... 제가 좀 이해가 안가는 부분이 많이 있는데요. 이더넷의 패킷을 캡쳐해서
캡쳐한 패킷의 데이터(즉, TCP세그먼트의 DATA)부분만 모아서 하나의
데이터를 만들고 싶다고 이해했는데, 맞는지요?
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
제가 질문이 너무 두서가 없었군요.. 죄송합니다..먼저 답변 감사
제가 질문이 너무 두서가 없었군요.. 죄송합니다..
먼저 답변 감사 드리구요...
리눅스 환경에서 pcap을 이용해서 캡쳐를 했는데요..
TCP의 데이터부를 재조합 하려는 겁니다.
침입 탐지를 하기 위해서는 단편화된 패킷을 순서대로 재조합을
해야 하는데.. 그 재조합 부분을 어떻게 구현해야 할지 막막해서..
참고할만한 소스나 문서 같은것두 좋구요.. 아니면..
전체적인 흐름 같은걸 알고 싶네요..
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
음...
pcap 라이브러리를 쓰신다면 제공하는 API중에 파일로 저장하는
함수가 있을껍니다. 그걸 이용해 보시던지, 위에 질문에서 말씀하셨듯이
DATA부분을 추출했다면 연결 리스트나 벡터같은 자료구조에 저장하고
사용해도 될꺼 같네요. 그리고 여기 가셔서 소스분석도 해보심 도움이
될꺼 같네요.
참고싸이트 : http://djstop.kldp.net/
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
TCP같은 경우에는 seq값과 ack값, 그리고 데이터 길이를 이용해서
TCP같은 경우에는 seq값과 ack값, 그리고 데이터 길이를 이용해서 예측하는 next_seq 등을 이용하셔야 합니다.
그러나 실제로 모든 데이터를 그렇게 합치는 것은 매우 어렵습니다.
테스트 환경이면 모르지만, 왠만한 네트워크에서는 세션의 수가 많아지는데,
이에 관한 모든 데이터를 메모리에 가지고 있다가 합쳐줄려면 메모리가 무지 많아야 겠죠.
대충 그 부하는 ethereal에서 트래픽을 캡처하신 다음에 패킷들을 순서대로 정리해서 보여주는 과정을 보시면 됩니다.
그리고 tool 메뉴에서 follow tcp stream인가 하는 plugin을 실행시켜 보시면
데이터만 추출해서 합치는게 어느 정도 부하가 걸리는지 대충 짐작하실 수 있을 겁니다.
댓글 달기