Tenho que desenvolver um cliente para um protocolo proprietário e seria muito útil poder entender o comportamento do servidor existente enviando-lhe mensagens customizadas e ver a resposta. "Telnet" seria perfeito para esse propósito, exceto pelo fato de o protocolo ser binário.
Atualmente, escrevi a mensagem que desejo (usando um editor hexadecimal) em um arquivo mymsg
e estou tentando enviá-la usando o netcat desta forma:
cat msg | netcat 127.0.0.1 1234
Meu problema com isso é que o netcat simplesmente para depois de atingir o EOF, então nunca consigo ver a resposta do servidor. Alguma sugestão?
(é claro, pode-se executar uma maquete do servidor proprietário usando nc -l -p 1234
)
Responder1
Estou um pouco confuso, porque pensei que o netcat tivesse um recurso explícito para lidar com esse caso. Achei que ele esperou até obter EOFs da entrada padrão e do soquete. Talvez seja apenas uma questão de tempo limite; verifique a documentação do netcat para ver se há uma opção para continuar lendo do soquete por um determinado período de tempo após obter o EOF no stdin.
Ou você pode usar a resposta kludge:
(cat msg; sleep 42) | netcat 127.0.0.1 1234
Responder2
Eu criei esse script python para fazer o trabalho.
#!/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