论坛: 编程破解 标题: 程序访问有域名的服务器的疑惑 复制本贴地址    
作者: ProgramLive [coolcall]    论坛用户   登录
一般没域名的,直接用IP访问的服务器
只要用IP建立SOCKET连接然后利用特定的协议(如HTTP协议)就可以和服务器
进行对话了。
可是有域名的服务器,我却怎么也不能和服务器对话。
如:
1.www.163.com    IP:202.106.168.109
2。http://202.106.168.109
同样是相同的地址用IE访问却返回不同的页面?。
而用OpenURL()函数访问就可以返回相同数据。
到底OpenURL()是怎么工作的?谢谢各位了

地主 发表时间: 04-07-30 16:51

回复: TomyChen [quest]   版主   登录
这是因为web服务器...做了一种处理。就是HTTP的头,在头里面包含了"www.163.com"这样的一个头,如果web服务器做成多域名式(就是虚拟主机式)的话,那么如果你以 ip访问就会访问到一个默认值的web位置,如果没有默认的web那就提示404无法找到该页。

可以查看一下HTTP的RFC...:)

B1层 发表时间: 04-07-30 17:32

回复: ProgramLive [coolcall]   论坛用户   登录
请问HTTP的头是在这里做的吧
GET /images/netease/search/20040527/mp3/100x50.gif HTTP/1.1
Accept: */*
Referer: http://adclient.163.com/html.ng/site=netease&affiliate=homepage&cat=homepage&type=logo&location=5
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: images.163.com
Connection: Keep-Alive
Cookie: Province=0771; City=0773; NTES_SESS=9t.zSgrWNRB8oXnHV3bZuNFgz_55d_UwBmJAjq..rXd0T9Yq4TDYdxH1bDc9l1GMfckEthYSGHm8VFImQ7vA4Id1T; NETEASE_SSN=coolcall; NETEASE_ADV=11&20


B2层 发表时间: 04-07-30 18:06

回复: TomyChen [quest]   版主   登录
对...
Host: images.163.com
就是web服务器需要用来匹配相关路径的一个标记...
你用IIS自己在机器上弄一下就明白了...
然后再搜索一下“IIS+虚拟主机”



B3层 发表时间: 04-07-30 20:46

回复: 286 [unique]   版主   登录
学了一招。

B4层 发表时间: 04-08-02 10:05

回复: ProgramLive [coolcall]   论坛用户   登录
我想我明白TomyChen的意思了,但我反复做了实验,问题应该不是这,还是不行
方法是:用163的IP做了SOCKET连接,然后用嗅探器探出IE发出的数据包,
伪装一个IE请求。
各位是否做过原始的HTTP对话程序?给小弟看看好吗?

B5层 发表时间: 04-08-02 22:57

回复: TomyChen [quest]   版主   登录
大概如下:
用gethostbyname();把域名转一道就可以了
Send的时候...
代码:

sprintf(szBuf,"GET /%s/HTTP/1.1\r\n%s\r\n%s\r\nHost:%s\r\n",param.pGetFileName,
"Accept: */*",
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; Maxthon)",
param.pHostName
);
send(hSocket,szBuf,sizeof(szBuf),0);
Sleep(100);
memset(szBuf);
recv(hSocket,szBuf,sizeof(szBuf),0);
...



这样就完成了一次了...
注意...上面的\r\n在Sniffer中抓的包,如果不转成16进制看,你是看不出来有一个回车换行的...所以在 Send的时候不能成功的把请求发到服务器...


B6层 发表时间: 04-08-03 10:35

回复: TomyChen [quest]   版主   登录
上面的
param.pGetFileName
是一个你要抓取的服务端文件名(不带/)
param是我自己定的一个结构,整套代码...涉及到一些...嘻嘻...就目前还不能公开的东西,所以只把思路给出^^
param.HostName相当于"www.163.com";
嗯,这样子应该没啥难度了吧:)


B7层 发表时间: 04-08-03 10:38

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号