#include <stdafx.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char **argv)
{
//-----------------------------------------
//
定义初始化变量
WSADATA
wsaData;
int
iResult;
DWORD
dwError;
int i =
0;
struct
hostent *remoteHost;
char
*host_name;
struct
in_addr addr;
char
**pAlias;
//
校验参数
if (argc !=
2) {
printf("usage: %s ipv4address\n",
argv[0]);
printf(" or\n");
printf("
%s hostname\n", argv[0]);
printf(" to return the
host\n");
printf("
%s 127.0.0.1\n", argv[0]);
printf(" to return the IP addresses for a
host\n");
printf("
%s www.a3gs.com\n", argv[0]);
return 1;
}
//
初始化Winsock
iResult =
WSAStartup(MAKEWORD(2, 2),
&wsaData);
if (iResult
!= 0) {
printf("WSAStartup failed: %d\n",
iResult);
return 1;
}
host_name =
argv[1];
//
如果用户输入是一个字母, 则我们使用gethostbyname()函数
//
假如输入是数字,则判断为IP地址
if
(isalpha(host_name[0])) {
printf("Calling gethostbyname with %s\n",
host_name);
remoteHost =
gethostbyname(host_name);
} else
{
printf("使用%s调用gethostbyaddr函数%s\n",
host_name);
addr.s_addr =
inet_addr(host_name);
if (addr.s_addr == INADDR_NONE)
{
printf("请输入有效IPv4地址\n");
return 1;
} else
{
remoteHost = gethostbyaddr((char *) &addr, 4,
AF_INET);
}
}
if
(remoteHost == NULL) {
dwError = WSAGetLastError();
if (dwError != 0) {
if (dwError == WSAHOST_NOT_FOUND)
{
printf("无法定位到主机\n");
return 1;
}else if (dwError == WSANO_DATA)
{
printf("无路由记录\n");
return 1;
} else {
printf("函数调用出错,代码: %ld\n", dwError);
return 1;
}
}
} else
{
printf("函数返回:\n");
printf("\t主机名称: %s\n", remoteHost->h_name);
for (pAlias = remoteHost->h_aliases; *pAlias != 0;
pAlias++) {
printf("\t主机别名#%d: %s\n", ++i, *pAlias);
}
printf("\t地址类型: ");
switch (remoteHost->h_addrtype) {
case AF_INET:
printf("AF_INET\n");
break;
case AF_INET6:
printf("AF_INET6\n");
break;
case AF_NETBIOS:
printf("AF_NETBIOS\n");
break;
default:
printf(" %d\n", remoteHost->h_addrtype);
break;
}
printf("\t地址长度: %d\n",
remoteHost->h_length);
i = 0;
while (remoteHost->h_addr_list[i] != 0) {
addr.s_addr = *(u_long *)
remoteHost->h_addr_list[i++];
printf("\t主机IP地址#%d: %s\n", i, inet_ntoa(addr));
}
}
return
0;
}
分享到:
相关推荐
本文将深入探讨如何在Java编程环境中通过IP地址获取对应的域名和主机名。 首先,我们需要理解DNS(Domain Name System)的作用。DNS是互联网的一项服务,它负责将域名解析为相应的IP地址,反之亦然。在Java中,我们...
本主题聚焦于“VC扫描局域网IP和主机名源代码”,这通常指的是使用Visual C++(VC)编写的程序,用于扫描本地局域网(LAN)中的IP地址和对应的主机名。下面我们将深入探讨这个话题,包括网络扫描的基本概念、VC编程...
VC 获取MAC和IP的代码,同时获得域名、主机名、独立工作域、绑定的Ip地址、默认网关以及DNS等。可将本代码所演示的获取方法应用到其它的VC 开发项目中,挺基础,但属于有必要掌握的内容,测试截图如图所示。 程序...
在这个场景下,"VC 获取主机名和IP地址.rar" 提供了一段使用Visual C++(VC)编写的源码,用于实现获取主机名和IP地址的功能。这对于网络通信、系统监控以及故障排查等任务来说是必不可少的。 首先,我们需要理解...
在VC++编程环境中,获取主机名和IP地址是网络编程中的基本操作,这对于构建网络应用程序或者进行系统诊断非常有用。本文将深入探讨如何利用VC++实现这一功能,并提供相关的编程思路和技术要点。 首先,我们需要了解...
`GetComputerName`函数用于获取主机名,而`GetHostByName`或`getaddrinfo`函数则用于获取IP地址。 - `GetComputerName`: 这个函数返回当前计算机的NetBIOS名称,可以使用`GetComputerNameEx`函数获取更详细的主机...
通过调用特定的Winsock函数,如`gethostbyname`或`getaddrinfo`,开发者可以实现域名到IP地址的转换。 1. **Winsock库的引入**:在VC 6.0项目中,首先需要包含Winsock库。这可以通过在项目设置中添加`winsock2.h`...
可以通过`GetComputerNameEx`函数获取主机名,它允许你选择返回计算机的全名、NetBIOS名或DNS域名。例如,使用`GET_COMPUTER_NAME_FORMAT_DOMAIN`标志可以得到域名。 2. **获取网卡信息**: `GetAdaptersInfo`...
在计算机网络中,获取本机的IP地址和主机名是常见的需求,这通常涉及到网络编程和系统调用。本文将详细讲解如何使用VC++来实现这个功能。 首先,我们需要了解IP地址和主机名的基本概念。IP地址(Internet Protocol ...
3. **设置目标主机信息**:使用`gethostbyname`或`getaddrinfo`函数获取域名对应的IP地址。这两个函数都是用于域名解析的,`gethostbyname`适用于较旧的API,而`getaddrinfo`是更现代且功能更强大的选择,支持IPv6。...
然而,根据描述,这个小程序可能只实现了最后一步,即获取IP地址(可能是通过其他方式,例如直接解析`gethostbyname`或`getaddrinfo`函数,而不是通过DNS查询)并将其保存到剪贴板,而没有涵盖完整的DNS解析流程。...
在这个系统中,核心任务是从主机名解析出对应的IP地址,这是通过调用操作系统提供的API或者网络库实现的。 首先,我们要理解IP地址与主机名的关系。在互联网上,每个设备都有一个唯一的IP地址,它是网络层通信的...
然后,可以使用gethostbyname或gethostbyaddr函数来解析IP地址,获取主机信息。对于DNS查询,可能需要用到send和recv函数进行数据的发送与接收。如果查询目标是WHOIS服务器,那么可能需要构建特定的查询请求报文,并...
- 关键函数包括`WSAStartup`(初始化Winsock)、`gethostbyname`(获取主机名的IP地址)、`gethostname`(获取本地主机名)和`getipnodebyname`(通过域名获取IP地址)等。 4. 获取网络接口信息: - `...
3. **解决主机名**:通过`gethostbyname`或`getaddrinfo`函数,将远程服务器的域名或IP转换为套接字地址结构(struct sockaddr_in)。 4. **建立连接**:调用`connect`函数,将Socket与远程服务器的地址连接起来。...
在IT领域,网络通信是不可或缺的一部分,而Winsock(Windows Sockets)是Windows操作系统中实现TCP/IP协议族接口的一种方式。本主题将深入探讨如何利用Winsock编程来获取本机的IP地址和计算机名称,这对于开发涉及...
你需要知道远程计算机的IP地址或域名以及适当的端口号。 其次,要获取远程硬盘内容,你需要实现一种文件遍历机制。这可能涉及到使用SMB(Server Message Block)协议,这是一个在Windows系统中广泛使用的网络文件...
3. 设置目标主机:根据IP地址或域名解析目标主机。 4. 发送ping请求:对于ICMP,使用sendto函数发送echo请求;对于TCP/UDP,可以连接到特定端口。 5. 接收响应:等待并接收目标主机的回应,分析结果以确定主机状态。...
1. **创建CPing对象**:首先实例化CPing类,通常需要指定要ping的目标主机IP地址或域名。 2. **配置参数**:如果需要,可以设置ping请求的相关参数,如超时时间、数据包大小等。 3. **发起ping请求**:调用类中的...
通过主机名称获得IP地址 通过IP地址获得主机名称 实现无连接的网络通信 获得计算机的DNS服务器地址 获得计算机的IP地址 获得计算机的IP协议统计信息 实现面相连接的网络通信 获得本地计算机...