2010-09-20 30 views
6

Tôi có kết nối nằm phía sau tường lửa hạn chế chỉ cho phép truy cập HTTP (S) thông qua proxy (10.10.1.100:9401). Địa chỉ IP tôi nhận được là động và mặt nạ mạng con là 255.255.255.255 (Tôi biết, lạ!).Lỗi 'Không có tuyến đường để lưu trữ'

Tôi cố gắng để viết một chương trình ổ cắm Python đơn giản để kết nối với proxy để gửi một số yêu cầu 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() 

tôi nhận được một ngoại lệ (113, "Không có con đường để lưu trữ") trong thời gian kết nối . Bây giờ ở đây là một phần lạ — Tôi có thể duyệt web bằng cách sử dụng các cài đặt proxy tương tự, và nếu kiểm tra các ổ cắm hiện đang kết nối qua netstat -tna Tôi thấy kết nối ACTIVE đến 10.10.1.100:9401.

Tôi đã thử một lệnh đơn giản như export http_proxy='10.10.1.100:9401' && wget aorotos.com/index.html và thậm chí hoạt động! Nếu tôi bật tùy chọn gỡ lỗi (-d) trong wget, tôi thậm chí có thể lấy bộ mô tả tệp của socket.

Tôi đã đi qua mã nguồn wget và từ những gì tôi có thể thấy nó cũng sử dụng câu lệnh kết nối thông thường và không đặt bất kỳ tùy chọn ổ cắm đặc biệt nào (tôi sẽ xem xét kỹ lưỡng sau). Tôi đã thử cùng một mã trong C, và nó cũng không thành công.

Bảng định tuyến được cung cấp qua route

Destination Gateway  Genmask  Flags Metric Ref Use Iface 
default  *   0.0.0.0  U  0  0  0 gprs0 

Có ai có bất kỳ ý tưởng gì có thể là sai?

EDIT: Hiện tại IP của tôi là 10.16.82.250. Và đó là tất cả những gì có trong đầu ra route. Nếu bạn quan tâm đến IP bên ngoài của tôi là 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) 

EDIT 2: tôi hạ cánh lên cài đặt tcpdump và đi qua là thủ công, và cuối cùng là cài đặt Wireshark (Tôi đang trên N900 của tôi) chỉ để nhận ra, từ các bãi chứa gói, mà Tôi đã sử dụng cổng 4901 thay vì 9401 trong cả hai chương trình C và kịch bản python! Doh! Tôi đổ lỗi cho màn hình nhỏ và, chính tôi.

Có cách nào để đóng câu hỏi này bằng "Tôi là thằng ngốc" hay gì đó không? : P Xin lỗi vì đã dành thời gian của bạn! (Tôi đã dành hơn một tuần cho điều này. Tôi không thể tin rằng tôi đã trải qua hầu hết mã nguồn của wget!)

+0

Kết quả đầu ra của tuyến đường hơi nhỏ, có phải đầu ra duy nhất hoặc có nhiều hơn không? Đồng thời - bạn có thể đưa ra một ví dụ địa chỉ IP hợp lệ cho giao diện của gprs0 không? – synthesizerpatel

+0

'ifconfig' nói gì? – bstpierre

+0

Vì bạn đã tìm thấy vấn đề bằng cách sử dụng wireshark, và đây là câu trả lời của doron được đề xuất, có vẻ công bằng khi chấp nhận câu trả lời đó. – bstpierre

Trả lời

3

Tôi không chắc chắn vấn đề là gì nhưng hãy thử sử dụng Wireshark. Điều này sẽ ít nhất cho phép bạn xem những gì đang xảy ra ở cấp độ mạng. Nên có đủ thông tin từ nhật ký gói Wireshark để chẩn đoán sự cố của bạn.

Các vấn đề liên quan