启就的王燕同学
查询了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消息了