因此,我在vm上安装了一个Apache Web服务器。我想编写一个简单的脚本,该脚本将使用套接字获取网站的主页。我可以在没有ssl的情况下完成此操作,但是我最近安装了ssl,并认为我应该尝试使用ssl版本。这是我的代码,基于另一个问题,在Python中打开SSL套接字连接
import socket, ssl
s = socket.socket()
wrappedSocket = ssl.wrap_socket(s)
wrappedSocket.connect(('127.0.0.1', 443))
wrappedSocket.sendall(
'GET / HTTP/1.1\r\n'
'Host: vulnerable\r\n'
'User-Agent: sslsocket.py\r\n'
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n'
'Accept-Language: en-US,en;q=0.5\r\n'
'Accept-Encoding: gzip, deflate\r\n'
'Connection: keep-alive\r\n'
'\r\n'
)
ans = wrappedSocket.recv(4096)
print ans
该脚本将继续运行,并且从不输出任何内容。经过进一步调试,我发现它在connect()函数调用上中断了,但无法弄清楚为什么会发生。
编辑-在评论中获得一些帮助后,我意识到域名是127.0.1.1。但是,现在我将HTTP标头作为输出,但实际上并没有给我页面的HTML。这次出什么事了?
好像您真的很接近,Henrik已经解决了有关您的连接的问题。
如果您只收到一半的消息,则可能是由于对recv的限制。尝试增加它,或使用makefile方法,这样就不必担心限制。
编辑:显示什么是makefile,可以做什么。
my_socket = socket.socket()
my_socket_input = my_socket.makefile('r')
my_socket_output = my_socket.makefile('w')
这些新工具使操作变得更加简单,就像您正在写入和读取文件一样。使用新的socket_input变量,可以调用readline等方法,而使用socket_output可以调用write等方法。
some_text = my_socket_input.readline()
您无需担心的细节之一就是recv上的缓冲区大小,因为makefile会为您处理
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句