So senden Sie eine Binärnachricht in TCP und speichern die Antwort

So senden Sie eine Binärnachricht in TCP und speichern die Antwort

Ich muss einen Client für ein proprietäres Protokoll entwickeln und es wäre sehr nützlich, das Verhalten des vorhandenen Servers verstehen zu können, indem ich ihm benutzerdefinierte Nachrichten sende und mir die Antwort ansehe. „Telnet“ wäre für diesen Zweck perfekt, allerdings ist das Protokoll binär.

Ich habe also derzeit die gewünschte Nachricht (mit einem Hex-Editor) in eine Datei geschrieben mymsgund versuche, sie mit Netcat folgendermaßen zu senden:

cat msg | netcat 127.0.0.1 1234

Mein Problem dabei ist, dass Netcat einfach stoppt, wenn es EOF erreicht, sodass ich die Antwort des Servers nie zu sehen bekomme. Irgendwelche Vorschläge?

(natürlich kann man ein Modell des proprietären Servers ausführen mit nc -l -p 1234)

Antwort1

Ich bin ein wenig verwirrt, weil ich dachte, dass Netcat eine explizite Funktion hat, um genau diesen Fall zu behandeln. Ich dachte, es wartet, bis es EOFs sowohl von der Standardeingabe als auch vom Socket erhalten hat. Vielleicht ist es nur eine Timeout-Sache; sehen Sie in Ihrer Netcat-Dokumentation nach, ob es eine Option gibt, nach dem Erhalten von EOF auf stdin für eine bestimmte Zeit weiter vom Socket zu lesen.

Oder Sie können die Flohmarktantwort verwenden:

(cat msg; sleep 42) | netcat 127.0.0.1 1234

Antwort2

Um diese Aufgabe zu erledigen, habe ich mir dieses Python-Skript ausgedacht.

#!/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

verwandte Informationen