Мне нужно разработать клиент для проприетарного протокола, и было бы очень полезно иметь возможность понять поведение существующего сервера, отправив ему пользовательские сообщения и посмотреть на ответ. "Telnet" идеально подходит для этой цели, за исключением того, что протокол является двоичным.

Итак, в настоящее время я написал нужное сообщение (с помощью шестнадцатеричного редактора) в файле mymsg и пытаюсь отправить его с помощью netcat следующим образом:

cat msg | netcat 127.0.0.1 1234

Моя проблема в том, что netcat просто останавливается после того, как достигает EOF, поэтому я никогда не вижу ответа сервера. Какие-либо предложения?

(конечно, можно запустить макет проприетарного сервера, используя nc -l -p 1234)

2 ответа2

1

Я немного озадачен, потому что я думал, что у netcat есть явная особенность для обработки только этого случая.  Я думал, что он ждал, пока не получит EOF от стандартного входа и сокета.  Может быть, это просто тайм-аут; проверьте документацию по netcat, чтобы узнать, есть ли возможность продолжать чтение из сокета в течение определенного времени после получения EOF на stdin.

Или вы можете использовать ответ Kludge:

(cat msg; sleep 42) | netcat 127.0.0.1 1234
0

Я придумал этот скрипт на Python, чтобы сделать работу.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .