[英]Netcat implementation in Python
我找到了這個並將其用作我的基礎,但它無法立即使用。 我的目標也是將它視為一個包而不是命令行實用程序,因此我的代碼更改將反映這一點。
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
當我向我的設備發送基本命令時,它返回以下內容。
50PMA-019 Connection Open
Atten #1 = 63dB
我的代碼讀取了第一行,但隨后我收到一條錯誤消息,指出連接暫時不可用,並且沒有收到第二行。 如果我將其更改為阻塞,它只會阻塞並且永遠不會返回。 有什么想法嗎?
如果你只使用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()
我添加了shutdown
調用,因為也許您的設備正在等待您說您已完成發送數據。 (這有點奇怪,但這是可能的。)
以下是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()
它可用於將“內容”發送到“端口”上的“主機”(所有這些都可能作為刺痛輸入)。
問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.