A conexão do Netcat é fechada após a conexão por meio do python

0

Então eu instalei o Netcat no meu pi de framboesa e meu mac e posso fazer com que eles se conectem muito facilmente. O problema é que, se eu quiser um script python no meu mac para estabelecer a conexão quando o pi framboesa já está ouvindo uma conexão. Ele se conectará, mas fechará a conexão imediatamente. Eu uso esse código.

Import os os.popen("nc -v [MY IP] [Port]")

A razão pela qual eu quero fazer isso é para que eu possa enviar comandos via python sobre o Netcat E.g.

os.popen("Hello other computer")

Como posso corrigir isso? Obrigado.

    
por ferret249 10.08.2015 / 09:24

1 resposta

0

O problema é provavelmente que nc é uma conexão bidirecional, mas popen() apenas usa um caminho. Quando o servidor remoto tenta ler a partir da conexão, o nc irá ler a partir do seu stdin, o qual você não está configurando, então provavelmente ele recebe o eof e assim a conexão é fechada.

Em vez de popen() , use o% bidirecionalsubprocess.Popen().

import subprocess
cmd = "nc -v [MY IP] [Port]"
p = subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

Você pode fazer msg = p.stdout.readline() ou p.stdin.write("reply\n") , ou p.communicate(...) , conforme descrito nos documentos on-line ou por pydoc subprocess.Popen .

Alternativamente, e mais simplesmente, você pode substituir nc e usar soquetes nativamente em python. Não é particularmente difícil. Por exemplo, como cliente:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((MY_IP, PORT))
s.send('Hello, world')
print s.recv(1024) # read reply
s.close()
    
por 10.08.2015 / 15:38