答案 0 :(得分:1)
如果你只是想做你所问的话,我会使用popen
:
import subprocess
test_cmd = 'echo \'blah\' | netcat 123.123.123.123 6666'
process = subprocess.Popen(test_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
err = process.stderr.read()
print(str(err))
它应该可以工作,但我没有测试它。无论如何,这会让你知道你必须做什么。
我的回答适用于基于 unix 的发行版。如果您正在寻找跨平台解决方案,那么您提供的链接应该可以解决问题。
Another我发现它很有用的方式:
import socket
class Netcat:
def __init__(self, ip, port):
self.buff = ""
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((ip, port))
def read(self, length = 1024):
""" Read 1024 bytes off the socket """
return self.socket.recv(length)
def read_until(self, data):
""" Read data into the buffer until we have data """
while not data in self.buff:
self.buff += self.socket.recv(1024)
pos = self.buff.find(data)
rval = self.buff[:pos + len(data)]
self.buff = self.buff[pos + len(data):]
return rval
def write(self, data):
self.socket.send(data)
def close(self):
self.socket.close()
创建课程后,只需根据需要使用它:
from netcat import Netcat
# start a new Netcat() instance
nc = Netcat('127.0.0.1', 53121)
# get to the prompt
nc.read_until('>')
# start a new note
nc.write('new' + '\n')
nc.read_until('>')
# set note 0 with the payload
nc.write('set' + '\n')
nc.read_until('id:')
如果您将提供的链接与此解决方案进行比较,您会发现您必须以这种或那种方式使用套接字。因此,我认为没有任何其他更简单的方法可以满足您的需求。