啟就的王燕同學
查詢了dns解析的確沒有任何問題,dns已經(jīng)能正確將sw2us.com解析到61.152.116.120,好了到這里dns應(yīng)該排除問題了。
通過寫程序測試 80端口,如果直接ip方式訪問http://61.152.116.120/,瀏覽器會發(fā)送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()
發(fā)現(xiàn)通過域名訪問到80端口時,客戶瀏覽器的這個鏈接一建立馬上會被掛斷(time.sleep還沒執(zhí)行完畢就被掛斷了,導(dǎo)致之后接收瀏覽器的請求都來不 及,更不用談回送頁面數(shù)據(jù)了),而這個掛斷的操作不是瀏覽器發(fā)起的,這定是路由環(huán)節(jié)上某一點發(fā)起的,我理解為是網(wǎng)絡(luò)監(jiān)管層。
好的,我又做telnet測試,我直接telnet sw2us.com 80 ,連上服務(wù)程序之后 輸入GET / ,能正常的接收到服務(wù)器回送回來的數(shù)據(jù),直到服務(wù)端主動掛斷這個鏈接。
telnet與瀏覽器訪問 sw2us.com的測試區(qū)別在于: 瀏覽器連接上web服務(wù)器80之后將傳送http頭請求,而telnet測試時并沒有發(fā)送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
所以結(jié)論很簡單,ip直接訪問,網(wǎng)監(jiān)者直接放行,而不管你是否發(fā)送http頭,而域名請求時被網(wǎng)關(guān)根據(jù)要訪問的端口和請求的協(xié)議(http根據(jù)請求包頭來 判斷)直接過濾掉,過濾的方法就是一旦發(fā)現(xiàn)目標80端口 + http協(xié)議包頭,直接將剛剛建立的鏈接掛斷,導(dǎo)致了瀏覽器一連接到webserver便丟失鏈接服務(wù)回送數(shù)據(jù),導(dǎo)致不能正常顯示網(wǎng)頁的情況。
路由節(jié)點上做了過濾,所以很簡單,去除這個限制吧!!!! 看到這個頁面就沒問題了! 非端口80都沒問題,就這個該死的80為啥不通啊,telnet 80這個端口也是有數(shù)據(jù)過來的,定是 網(wǎng)監(jiān)那里過濾了http消息了