Python socket发送问题

1 投票
2 回答
3892 浏览
提问于 2025-04-16 13:02

我现在正在写一个简单的Python脚本,这个脚本可以连接到一个IP地址和端口,然后让你执行一些命令。这个功能有点像telnet。我想让它连接到比如MySQL(只是举个例子),然后执行一些MySQL命令,就像用Telnet或NetCat那样。
但是假设我连接到一个服务后,却无法执行命令。我正在尝试连接到本地的一个自定义端口。让我给你看看代码:


try:
    sock.connect((host, port))
    recvdata = sock.recv(socksize)
    print("Type your commands now")
    while(1): #Setting a loop
        print(recvdata)
        userInput = raw_input(">")
        sock.send(userInput + '\r\n\r\n')
        print(recvdata)
except KeyboardInterrupt:
    print("\nConnection closed")
    sys.exit()

这是我连接后得到的结果:

:: !Test service! ::

如果我输入任何东西,结果都是显示同样的横幅。无论我输入什么,都是这个横幅,一遍又一遍。

2 个回答

1

这也难怪。你在发送输入后,从来没有在通信的套接字上调用过 sock.recv。在进入循环之前,recvdata 里存的是最开始 connect 时的“欢迎信息”。但是一旦进入循环,这个变量就再也没有被改变过。

我觉得你想要的是:

sock.connect((host, port))
recvdata = sock.recv(socksize)
print(recvdata)
print("Type your commands now")
while(1): #Setting a loop
    userInput = raw_input(">")
    sock.send(userInput + '\r\n\r\n')
    recvdata = sock.recv(socksize)
    print(recvdata)
1

你的 recvdata = sock.recv(socksize) 这行代码放在了接收循环之外。我觉得,学习一下 Python中的socket编程 会对你有帮助。你之前的问题和这个问题,如果看过那个入门教程,应该很容易就能发现了。可以看看一个示例的socket回声服务器/客户端(在这个网站上),你可以在这个基础上进行修改,继续你的任务。运行两个独立的终端,一个端口运行回声服务器,另一个端口使用回声客户端,地址指向 127.0.0.1

撰写回答