啟就的王燕同學
查詢了dns解析的確沒有任何問題,dns已經能正確將sw2us.com解析到61.152.116.120,好了到這里dns應該排除問題了。
通過寫程序測試 80端口,如果直接ip方式訪問http://61.152.116.120/,瀏覽器會發送http請求信息到80端口,都沒有問題
但如果通過http://sw2us.com訪問,問題就來了:
s.bind(('61.152.116.120',80))
s.listen(5)
ipfile=open('ips.txt','w')
while True:
try:
c,raddr = s.accept()
print raddr
time.sleep(1)
bytes = c.recv(1000)
print bytes
c.sendall('hello'*100)
c.close()
ipfile.write(str(raddr)+"\n")
ipfile.flush()
except: traceback.print_exc()
發現通過域名訪問到80端口時,客戶瀏覽器的這個鏈接一建立馬上會被掛斷(time.sleep還沒執行完畢就被掛斷了,導致之后接收瀏覽器的請求都來不 及,更不用談回送頁面數據了),而這個掛斷的操作不是瀏覽器發起的,這定是路由環節上某一點發起的,我理解為是網絡監管層。
好的,我又做telnet測試,我直接telnet sw2us.com 80 ,連上服務程序之后 輸入GET / ,能正常的接收到服務器回送回來的數據,直到服務端主動掛斷這個鏈接。
telnet與瀏覽器訪問 sw2us.com的測試區別在于: 瀏覽器連接上web服務器80之后將傳送http頭請求,而telnet測試時并沒有發送http頭消息
GET / HTTP/1.1
Host: www.sw2us.com
User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
所以結論很簡單,ip直接訪問,網監者直接放行,而不管你是否發送http頭,而域名請求時被網關根據要訪問的端口和請求的協議(http根據請求包頭來 判斷)直接過濾掉,過濾的方法就是一旦發現目標80端口 + http協議包頭,直接將剛剛建立的鏈接掛斷,導致了瀏覽器一連接到webserver便丟失鏈接服務回送數據,導致不能正常顯示網頁的情況。
路由節點上做了過濾,所以很簡單,去除這個限制吧!!!! 看到這個頁面就沒問題了! 非端口80都沒問題,就這個該死的80為啥不通啊,telnet 80這個端口也是有數據過來的,定是 網監那里過濾了http消息了