2011-08-31 2 views
1

소켓에서 보낸 패키지를 처리하는 Linux의 서버 서비스 프로그램에서 내 작업을하고 있습니다. 이미 포트를 수신중인 오래된 서비스가 있습니다. 이전 서버를 중지 할 수 없습니다. 서비스를 제공하고 패키지를 구형 서버로 보내서 새로운 서버 서비스로 보내야 제대로 작동하는지 확인할 수 있습니다. 어떻게 패키지를 가져 와서 새 서비스에 다시 보낼 수 있습니까? 그러한 도구가 있습니까? 아니면 tcpdump와 같은 도구가 이미 제공하는 기능이 있습니까? 감사합니다 :)네트워크 인터페이스 또는 파일의 일부 포트에서받은 패키지를 저장하고 필요할 때받은 패키지를 다시 보내는 방법은 무엇입니까?

+0

또한 http://serverfault.com/에 문의하십시오. – Quamis

답변

1

UDP와 같은 연결없는 프로토콜의 경우 tcpdump로 데이터를 기록하고 netcat으로 다시 보낼 수 있습니다.

TCP와 같은 연결 지향 프로토콜의 경우 TCP는 사용자의 패킷이 확인 된 승인 번호에 적절한 값을 가질 것으로 기대하기 때문에 쉽지는 않은 것으로 생각합니다. 이는 녹음 된 패킷과 새로 설정된 TCP 연결간에 차이가납니다. 이 경우 직접 연결 (즉, 그 용도로 맞춤 앱 사용)하고 유료 하중 만 다시 보내야합니다. 어쩌면, 그 목적을 위해 쉽게 사용할 수있는 응용 프로그램이 있습니다 (tcpdump 형식의 페이로드를 추출하여 원격으로 보내면됩니다). 그러나 그런 응용 프로그램을 작성하는 것은 꽤 쉽습니다.

그런데도 서버가 자신의 시퀀스를 유지 관리하는 경우에도 UDP에 대해서도 똑같은 문제가 발생합니다. 재전송 패킷에는 서버가 수신 할 것으로 예상하지 않는 시퀀스 번호가있을 수 있습니다.

+0

도움을 주셔서 감사합니다. udp pkg만으로도 충분하지만 특정 패키지를 저장하고 netcat을 사용하여 tcpdump를 사용하여 재전송하는 방법을 구체적으로 지정할 수 있습니까? – king6cong

+0

'tcpdump'에'-w' 옵션이 있습니다. 맨 페이지를 참고하십시오. 불행하게도, 파일에는 원시 디테일 미터가없는 패킷이 포함될 것이므로 파일을 netcat의 표준 입력에 보내기 전에 파일을 원래 패킷으로 분리해야합니다. –

관련 문제