파이썬을 통한 연결 후 Netcat 연결이 닫힙니다.


0

그래서 나는 라즈베리 파이와 맥에 넷캣을 설치했고 그것들을 정말 쉽게 연결할 수 있습니다. 문제는 라즈베리 파이가 이미 연결을 듣고있을 때 내 Mac의 파이썬 스크립트가 연결을 설정하려는 경우입니다. 연결되지만 즉시 연결이 닫힙니다. 이 코드를 사용합니다.

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

내가 이것을하고 싶은 이유는 Netcat Eg를 통해 파이썬을 통해 명령을 보낼 수 있기 때문입니다.

os.popen("Hello other computer")

이 문제를 어떻게 해결할 수 있습니까? 감사.

답변:


0

문제는 아마도 nc양방향 연결이지만 popen()한 가지 방법 만 사용 한다는 것입니다 . 원격 서버가 연결에서 읽기를 시도하면 nc는 설정하지 않은 stdin에서 읽으므로 eof가 발생하여 연결이 닫힙니다.

popen()양방향 을 사용하는 대신 subprocess.Popen().

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

당신은 할 수있다 msg = p.stdout.readline()거나 p.stdin.write("reply\n"), 또는 p.communicate(...)에서 설명한대로 온라인 문서 또는하여 pydoc subprocess.Popen.


또는 더 간단하게 nc파이썬에서 기본적으로 소켓을 교체 하고 사용할 수 있습니다 . 특별히 어렵지 않습니다. 예를 들어, 클라이언트로서 :

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()

감사합니다. 나는 다른 쪽 끝에서 서보 블래스터를 사용하는 라즈베리 파이이기 때문에 여전히 네이티브 파이썬 소켓에서 하위 프로세스를 사용할 수 있다고 생각합니다. 따라서 하위 프로세스를 사용하면 파이 측에서 파이썬을 사용할 필요가 없습니다. 또한 nc를 사용하면 '> / dev / servoblaster'를 사용하여 서보 블래스터 장치 파일에 쓰는 것이 정말 간단하지만 소켓을 사용하면 장치 파일을 연 다음 파일을 플러시하거나 닫거나 무언가를 닫아야합니다.
ferret249
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.