Como enviar uma mensagem binária no TCP e armazenar a resposta

0

Eu tenho que desenvolver um cliente para um protocolo proprietário e seria muito útil ser capaz de entender o comportamento do servidor existente enviando mensagens personalizadas e olhando a resposta. "Telnet" seria perfeito para esse propósito, exceto que o protocolo é binário.

Atualmente, escrevi a mensagem que quero (usando um editor hexadecimal) em um arquivo mymsg e estou tentando enviá-lo usando o netcat dessa maneira:

cat msg | netcat 127.0.0.1 1234

Meu problema com isso é que o netcat simplesmente pára depois de atingir o EOF para que eu nunca consiga ver a resposta do servidor. Alguma sugestão?

(claro, pode-se executar um mock-up do servidor proprietário usando nc -l -p 1234 )

    
por user229790 07.06.2013 / 19:02

2 respostas

1

Estou um pouco perplexo, porque achei que o netcat tinha um recurso explícito para lidar apenas com esse caso. Eu pensei que ele esperou até obter EOFs da entrada padrão e do soquete. Talvez seja apenas uma coisa de tempo limite; verifique sua documentação do netcat para ver se há uma opção para continuar lendo no soquete por um determinado período de tempo após obter o EOF no stdin.

Ou você pode usar a resposta do kludge:

(cat msg; sleep 42) | netcat 127.0.0.1 1234
    
por 08.06.2013 / 02:47
0

Eu criei este 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
    
por 10.06.2013 / 09:35

Tags