TCP에서 바이너리 메시지를 보내고 응답을 저장하는 방법

TCP에서 바이너리 메시지를 보내고 응답을 저장하는 방법

독점 프로토콜용 클라이언트를 개발해야 하는데, 기존 서버에 사용자 지정 메시지를 보내고 답변을 살펴봄으로써 기존 서버의 동작을 이해할 수 있다면 매우 유용할 것입니다. "Telnet"은 프로토콜이 바이너리라는 점을 제외하면 해당 목적에 적합합니다.

그래서 현재 저는 원하는 메시지를 (16진수 편집기를 사용하여) 파일에 작성했고 mymsgnetcat을 사용하여 다음과 같은 방법으로 보내려고 합니다.

cat msg | netcat 127.0.0.1 1234

내 문제는 netcat이 EOF에 도달한 후에 중지하므로 서버의 응답을 볼 수 없다는 것입니다. 어떤 제안이 있으십니까?

(물론 를 사용하여 독점 서버의 모형을 실행할 수 있습니다 nc -l -p 1234)

답변1

나는 netcat에 이 경우를 처리할 수 있는 명시적인 기능이 있다고 생각했기 때문에 약간 당황했습니다. 나는 표준 입력과 소켓 모두에서 EOF를 얻을 때까지 기다렸다고 생각했습니다. 아마도 시간 초과일 수도 있습니다. stdin에서 EOF를 얻은 후 일정 시간 동안 소켓에서 계속 읽을 수 있는 옵션이 있는지 netcat 문서를 확인하세요.

또는 kludge 답변을 사용할 수 있습니다.

(cat msg; sleep 42) | netcat 127.0.0.1 1234

답변2

나는 그 일을 하기 위해 이 파이썬 스크립트를 생각해 냈습니다.

#!/usr/bin/env python

import socket
import sys

if (len(sys.argv) != 3):
    print "usage: " + sys.argv[0] + " host port <message >answer"
    print ""
    print "if you want to create a fake server side: nc -l -p port"
else:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((sys.argv[1], int(sys.argv[2])))
    msg = sys.stdin.read()
    s.send(msg)
    answer = s.recv(1024)
    print answer

관련 정보