Проблема отправки сокета Python - PullRequest
1 голос
/ 05 марта 2011

В настоящее время я работаю над простым скриптом Python, который подключается к IP / порту и позволяет вам выполнять команды преформ. Вроде как телнет. Я хочу, чтобы он подключился, скажем, к MySQL (просто пример), и выполнял команды MySQL, как если бы вы использовали Telnet или NetCat. Но допустим, я подключаюсь к службе, я не могу выполнять команды. Я пытаюсь подключиться к пользовательскому порту на локальном хосте. Позвольте мне показать код:

<code>
try:
    sock.connect((host, port))
    recvdata = sock.recv(socksize)
    print("Type your commands now")
    while(1): #Setting a loop
        print(recvdata)
        userInput = raw_input(">")
        sock.send(userInput + '\r\n\r\n')
        print(recvdata)
except KeyboardInterrupt:
    print("\nConnection closed")
    sys.exit()
Вот что я получаю при подключении:
<code>
:: !Test service! ::
Если я что-то наберу, я просто получу баннер снова. Один и тот же баннер снова и снова, несмотря ни на что.

Ответы [ 2 ]

1 голос
/ 05 марта 2011

Ваш recvdata = sock.recv(socksize) находится вне цикла recv.Я думаю, хорошее введение в программирование сокетов в Python может быть полезным для вас.Ваш предыдущий вопрос, и этот, был бы легко обнаружен вами с помощью этого вводного руководства.Взгляните на пример сокет-эхо-сервера / клиента ( на этом сайте ), который вы можете изменить в дальнейшем и продолжить работу.Запустите два отдельных терминала, запустите эхо-сервер на одном конце и используйте эхо-клиент с адресом pointint до 127.0.0.1.

1 голос
/ 05 марта 2011

Ну, не удивительно.На самом деле вы никогда не звоните sock.recv через коммуникационную розетку после отправки своего ввода.До цикла recvdata содержит «баннер» из начального connect.Но как только вы в цикле, эта переменная никогда не изменяется.

Я верю, что вы хотите:

sock.connect((host, port))
recvdata = sock.recv(socksize)
print(recvdata)
print("Type your commands now")
while(1): #Setting a loop
    userInput = raw_input(">")
    sock.send(userInput + '\r\n\r\n')
    recvdata = sock.recv(socksize)
    print(recvdata)
...