所以我在vm上安装了一个apache web服务器。我想写一个简单的脚本,它将使用套接字获取网站的主页。我能够在没有ssl的情况下完成它,但我最近安装了ssl并认为我应该尝试使用ssl版本。这是我的代码,基于另一个问题Opening a SSL socket connection in Python
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。这次出了什么问题?
答案 0 :(得分:2)
看起来你很亲密,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会为您处理