@KPEBETKA

Python.SSLSocket. Как получить имя хоста к которому обратился браузер?

Всё достаточно просто:
В файле /etc/hosts есть много записей типа
0.0.0.0 mail.ru
0.0.0.0 yandex.ru
0.0.0.0 google.ru
0.0.0.0 yahoo.com
...
Т.е. любой браузер при обращении к этим адресам будет перенаправлен на ip 0.0.0.0
На ip 0.0.0.0 на порту 443 висит своеобразный сервачок, который при обращении к нему должен возвращать GIF размером 1х1 пиксель.
Т.к. всё происходит по https, то для того чтобы нормально вернуть пиксель, сервачок должен генерить сертификат. Собственно для того чтобы сгенерить сертификат нужно знать имя хоста к которому обратился браузер

Соответственно в этом и проблема... Узнать к какому хосту обратился браузер у меня не получается. Вообще реально ли узнать это?

#!/usr/bin/env python

import socket, ssl

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 443))
s.listen(0)

while True:
	conn, addr = s.accept()

	#тут надо получить имя хоста )))

	gen_cert_key(host)
	ss = ssl.wrap_socket(conn, 
				server_side=True, 
				certfile="/tmp/cert.crt", 
				keyfile="/tmp/key.key")
	ss.send("HTTP/1.1 200 OK\r\nContent-type: image/gif\r\nAccept-ranges: none\r\nContent-length: 43\r\nConnection: close\r\n\r\nGIF89a\1\0\1\0\200\0\0\377\377\377\0\0\0\41\371\4\1\0\0\0\0\54\0\0\0\0\1\0\1\0\0\2\2\104\1\0;")
	ss.close()
	conn.close()
s.close()
  • Вопрос задан
  • 2956 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы