首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的python客户端在从互联网接收数据时挂起?

为什么我的python客户端在从互联网接收数据时挂起?
EN

Stack Overflow用户
提问于 2021-01-13 13:32:06
回答 1查看 42关注 0票数 0

我正试着用python做一个简单的端口扫描器,但是它似乎在recv期间挂起了,默认超时引发了一个异常并终止了程序。

代码语言:javascript
运行
复制
import socket, argparse

parser = argparse.ArgumentParser(description="A Port scanner",
                                 usage="command -w <website> -p <port>",
                                 prog="Port Scanner")

parser.add_argument("-w", nargs=1, type=str, required=True, dest="site",
                    help="The website to scan")
parser.add_argument("-p", nargs=1, type=int, dest="port",
                    help="The port to scan", default=80)

namespace = parser.parse_args()
def connect(host: str, port:int) -> bool:
    ip = socket.gethostbyname(host)
    socket.setdefaulttimeout(10)
    conn_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        conn_sock.connect((ip, port))
    except:
        print("[+] port {} is closed".format(port))
        return False
    else:
        print("[+] Port {} is open".format(port))
        conn_sock.sendall(b"HTTP GET /")
        response = conn_sock.recv(100)
        print("[+] Got 100 bytes as {}".format(response))
        return True
connect(namespace.site[0], namespace.port[0])

prog -w www.google.com -p 80身份运行(也在不同的网站上尝试过),它显示端口80已按预期打开并连接,而且发送数据似乎也不会造成任何问题。Trackback是

代码语言:javascript
运行
复制
    response = conn_sock.recv(100)
socket.timeout: timed out
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-13 13:42:31

服务器没有响应,因为您没有向它发送完整或有效的请求。尝试:

代码语言:javascript
运行
复制
conn_sock.sendall(b"HTTP GET /\r\n\r\n")

在(可选)头和(可选)正文之间需要有一个空行。您不需要设置任何头部,因此您只需要在请求的末尾添加两个CRLF。这将使您能够与服务器进行通信。

但是您应该将您的请求更改为:

代码语言:javascript
运行
复制
GET / HTTP/1.1\r\n\r\n 

如果您想要获得有效的HTTP/1.1 200 OK响应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65696169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档