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 mymsg
und 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