[英]python equivalent of netcat
我有一个 TCP 服务器,我需要用 Python 为其编写一个客户端。
服务器是使用arduino_uip库的 arduino; 服务器代码(几乎)与该库的TCP 服务器示例相同。 使用 nc 作为客户端可以正常工作。
但是当我使用 python 套接字(如在这个答案中)与服务器通信时,服务器在套接字关闭或关闭时挂起。
那可能是服务器的问题; 但是,由于 nc 作为客户工作正常,我的问题是:
这个答案与 nc 有什么不同,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()
编辑 :
看来(Vorsprung 的回答让我想到了!)这实际上是一个时间问题。 如果我在关闭之前在上面的代码中添加 sleep(0.5) 一切都很好(就像在 netcat 中,在我按下 Ctrl+C 之前有一个手动延迟)。 我想我现在必须检查那个arduino库......
查看了 netcat 源代码( svn checkout svn://svn.code.sf.net/p/netcat/code/trunk netcat-code ),它只在关闭之前调用 shutdown(),而不仅仅是在设置之后调用插座
这就是我所看到的区别
python相当于netcat
使用 nclib:pip install nclib
文档: https : //nclib.readthedocs.io/en/latest/
Python 3 netcat 侦听器,输入和输出分别分配给变量 command 和 data。
import nclib
def listener(port):
""" local netcat listener for reverse bash shell from a remote host. """
server = nclib.TCPServer(('0.0.0.0', int(port)))
print("listening ...")
for client in server:
print('Connected to %s:%d' % client.peer)
command = ""
while command != "exit":
try:
# if command was entered by the user
if len(command) > 0:
# read the line to hide command from output
if command in client.readln().decode('utf-8').strip(" "):
pass # disregard the last command
# get output until dollar sign (bash --posix forces bash-X.X$)
data = client.read_until('$')
print(data.decode('utf-8'), end="") # print string of received bytes
# get user input command and write command to socket
command = input(" ")
client.writeln(command)
# handle exceptions and exiting
except KeyboardInterrupt:
print("\nKeyboardInterrupt")
exit(1)
except Exception as e:
print("\nException Occurred\n")
print(e)
exit(1)
print("Disconnected :-)")
exit(1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.