您的位置:首页 > 其它

获取主机服务对应的端口和端口对应的服务_GetServerInfo

2014-05-08 16:25 363 查看
d

#include <WinSock2.h>
#include <iostream>

#pragma comment(lib,"ws2_32.lib")

using namespace std;
int handle_error()
{
WSACleanup();
return EXIT_FAILURE;
}
void server_info_show(PSERVENT server_info)
{
if (server_info == NULL)
{
cerr << "server_info:NULL,error:" << WSAGetLastError() << endl;
return;
}
cout << "official server name:" << server_info->s_name<<endl;

if (*server_info->s_aliases)
{
cout << "aliases list:" << endl;
for (char** list = server_info->s_aliases; *list != NULL; list++)
{
cout << "\t" << *list << endl;
}
}
cout << "port:" << ntohs(server_info->s_port)<< endl;
cout << "proto:" << server_info->s_proto<<endl;
}
int main(int	__argc, char** __argv)
{
WSADATA			wsa;
if (0 != WSAStartup(MAKEWORD(2,2), &wsa) )
{
cerr << "WSAStartup() failed!" << endl;
return handle_error();
}
//server get port from server name
char* server_name[] = {"telnet","domain","http", "ftp"};
unsigned int server_name_count = sizeof(server_name) / sizeof(char*);

USHORT			server_port[]= {7, 13,25,80};
unsigned int server_port_count = sizeof(server_port)/ sizeof(USHORT);

cout << "server get port from server name." << endl;
for (unsigned int i = 0; i < server_name_count; i++)
{
PSERVENT server_info = getservbyname(server_name[i], "tcp");
server_info_show(server_info);
}

cout << "server get server name from port." << endl;
for (unsigned int i = 0; i < server_port_count; i++)
{
PSERVENT server_info = getservbyport(htons(server_port[i]), "tcp");
server_info_show(server_info);
}
WSACleanup();
return EXIT_SUCCESS;
}
执行结果:

>GetServerInfo.exe
server get port from server name.
official server name:telnet
port:23
proto:tcp
official server name:domain
port:53
proto:tcp
official server name:http
aliases list:
www
www-http
port:80
proto:tcp
official server name:ftp
port:21
proto:tcp
server get server name from port.
official server name:echo
port:7
proto:tcp
official server name:daytime
port:13
proto:tcp
official server name:smtp
aliases list:
mail
port:25
proto:tcp
official server name:http
aliases list:
www
www-http
port:80
proto:tcp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: