У меня есть соединение, которое находится за ограничительным межсетевым экраном, который разрешает доступ HTTP (S) только через прокси (10.10.1.100:9401).IP-адрес, который я получаю, является динамическим, а маска подсети - 255.255.255.255 (я знаю, странно!).
Я попытался написать простую программу сокетов Python для подключения к прокси-серверу, чтобы отправлять некоторые HTTP-запросы.:
import socket
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
s.connect(( "10.10.1.100", 9401 ))
s.send("GET /index.html HTTP/1.1\r\nHost: aorotos.com\r\n\r\n")
d = s.recv(1024)
print d
s.close()
Я получаю исключение (113, «Нет маршрута к хосту») во время подключения.Теперь вот странная часть - я могу просматривать веб-страницы, используя те же самые настройки прокси-сервера, и если проверить текущие подключенные сокеты с помощью netstat -tna
, я вижу АКТИВНОЕ соединение с 10.10.1.100:9401.
Я попробовал простую команду, такую как export http_proxy='10.10.1.100:9401' && wget aorotos.com/index.html
, и даже она работает!Если я включу опцию отладки (-d
) в wget, я даже смогу получить дескриптор файла сокета.
Я просмотрел исходный код wget, и из того, что я вижу, он тоже использует обычный оператор connect и не устанавливает никаких специальных опций сокетов (я расскажу об этом позже).Я пробовал тот же код в C, и он тоже не работает.
Таблица маршрутизации, предоставляемая через route
, имеет вид
Destination Gateway Genmask Flags Metric Ref Use Iface
default * 0.0.0.0 U 0 0 0 gprs0
Кто-нибудь знает, что может быть не так?
РЕДАКТИРОВАТЬ: В настоящее время мой IP-адрес 10.16.82.250.И это все, что есть в выводе route
.Если вам интересно, мой внешний IP-адрес - 203.8.8.2.
ifconfig gprs0
-
gprs0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.17.221.94 P-t-P:10.17.221.94 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MTU:1400 Metric:1
RX packets:1832 errors:0 dropped:0 overruns:0 frame:0
TX packets:1844 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:1878364 (1.7 MiB) TX bytes:224746 (219.4 KiB)
РЕДАКТИРОВАТЬ 2: Я приземлился, установив tcpdump и пройдя его руководство, и, наконец, установил wireshark (я на моем N900) только для того, чтобы понять, отдамп пакета, который я использовал порт 4901 вместо 9401 как в программе C, так и в скрипте python!Doh!Я виню маленький экран и, ну, сам.
Есть ли какой-нибудь способ закрыть этот вопрос "Я идиот" или что-то в этом роде?: P Извините, что занял ваше время!(Я потратил на это больше недели. Не могу поверить, что прошел большую часть исходного кода wget
!)