在很多防火墙过滤规则中,都可以对
ip
地址进行过滤,实现访问控制。比如我们可以
通过设置规则,禁止对
ip
地址:
59.64.114.98
的访问。这个
ip
地址代表着
www.qq.com
的
ip
地址。
而对于普通用户来讲,他们并不知道这一串数字代笔着什么,相反,
他们更容易接受
www.qq.com
这样的域名。这就提出了一个问题,如何将主机名转化成
ip
名。
Windows
的
socket
库的
gethostbyname
提供了这样的功能,下面通过一个例子来详细说明:
这个例子将
www.qq.com
这个域名解析成
ip
地址,
并且保存到
IPAddress
中。
程序运行
的结果表明,
www.qq.com
对应着两个
ip
地址,分别是
59.64.114.98
和
59.64.114.103.
许多
现代的网站域名都对应多个
ip
。通过循环解析,就能得到它所代表的所有的
ip
。
第
145
行,
WsaRet
=
WSAStartup(0x0101,&WsaData);
所有使用
socket
的程序在使用
socket
之前必须调用该函数。
该函数的第一个参数指明请求使用的
socket
版本,
其中高字节
指明低版本,低字节指明高版本;操作系统利用第二个参数返回请求的
socket
的版本信息。
当一个应用程序调用
WSAStartup
时,
操作系统根据所请求的
socket
版本来搜索相应的
socket
库,然后绑定找到的
socket
库到应用程序中。以后应用程序就可以调用所请求的
socket
库
中的
socket
函数了。该函数执行成功返回
0.
150
行,
gethostbyname
函数,用以根据主机名获取
HOSTENT
结构的主机其它信息。
关于这个结构体更相信的信息,可以参考
msdn
的介绍。
159
行,使用完
socket
的函数后,要及时关闭
WSACleanup();