Znalazłem this i używam go jako mojej bazy, ale nie działało to od razu po wyjęciu z pudełka. Moim celem jest także potraktowanie go jako pakietu zamiast narzędzia wiersza poleceń, więc moje zmiany w kodzie będą to odzwierciedlać.Implementacja Netcat w Pythonie
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
Kiedy wysyłam podstawowe polecenie do mojego urządzenia, zwraca następujące dane.
50PMA-019 Connection Open
Atten #1 = 63dB
Mój kod odczytuje pierwszą linię, ale potem dostaję błąd mówiąc, że połączenie jest tymczasowo niedostępny i nie dostać drugą linię. Jeśli zmienię to na blokowanie, blokuje się i nigdy nie wraca. jakieś pomysły?
Dodanie wiersza wyłączania do mojego oryginalnego kodu sprawiło, że działało, a pożyczę od twojego kodu, aby przyciąć mój kod. – unholysampler
Mam problem, gdzie mój mac os nie wysyła pakietów, dopóki nie zamknę połączenia. Czy są jakieś sposoby, ponieważ nie mogę nawiązać ponownie połączenia. –
Bob, powinieneś rozważyć kliknięcie pytania Zadaj pytanie i zadaj to pytanie, jeśli jeszcze tego nie zrobiłeś. –