我发现了这个并且正在使用它作为我的基础,但它没有开箱即用.我的目标也是将其视为包而不是命令行实用程序,因此我的代码更改将反映出来.
class Netcat:
def __init__(self, hostname, port):
self.hostname = hostname
self.port = port
def send(self, content):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((self.hostname, self.port))
self.socket.setblocking(0)
result = '';
read_ready, write_ready, in_error = select.select([self.socket], [], [self.socket], 5)
if(self.socket.sendall(content) != None):
return
while(1):
buffer = ''
try:
buffer = self.socket.recv(128)
while(buffer != ''):
result += buffer
try:
buffer = self.socket.recv(128)
except socket.error as err:
print (err, type(err))
buffer = ''
if(buffer == ''):
break
except socket.error as err:
print (err, type(err))
if(buffer == ''):
break
return result
Run Code Online (Sandbox Code Playgroud)
当我向设备发送基本命令时,它返回以下内容.
50PMA-019 Connection Open
Atten #1 = 63dB
Run Code Online (Sandbox Code Playgroud)
我的代码读取第一行,但后来我得到一个错误,说连接暂时不可用,并且它没有获得第二行.如果我将其更改为阻止,它只会阻塞而永远不会返回.有什么想法吗?
Jas*_*rff 48
如果你只是使用它是否有效nc?
我想你应该尝试一些更简单的事情:
import socket
def netcat(hostname, port, content):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((hostname, port))
s.sendall(content)
s.shutdown(socket.SHUT_WR)
while 1:
data = s.recv(1024)
if data == "":
break
print "Received:", repr(data)
print "Connection closed."
s.close()
Run Code Online (Sandbox Code Playgroud)
我添加了shutdown通话,因为您的设备可能正在等待您说您已完成发送数据.(这可能有点奇怪,但它有可能.)
小智 11
以下是python3上的一个工作实现:
import socket
def netcat(host, port, content):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, int(port)))
s.sendall(content.encode())
s.shutdown(socket.SHUT_WR)
while True:
data = s.recv(4096)
if not data:
break
print(repr(data))
s.close()
Run Code Online (Sandbox Code Playgroud)
它可用于将"内容"发送到"端口"上的"主机"(所有这些都可以作为sting输入).
问候
| 归档时间: |
|
| 查看次数: |
56851 次 |
| 最近记录: |