获取服务名、服务端口号、服务所用协议——getservent(),getservbyname(),getservbyport()
来源:互联网 发布:大炼钢铁知乎 编辑:程序博客网 时间:2024/04/29 20:18
Services are represented by the port number portion of the address. Each service is offered on a unique, well-known port number. We can map a service name to a port number withgetservbyname, map a port number to a service name withgetservbyport, or scan the services database sequentially withgetservent.(APUE-2e)
地址的端口部分和服务是一一对应的,getservbyname()和 getservbyport()能将二者相互映射(map)。
/* Description of data base entry for a single service. */struct servent{ char *s_name;/* Official service name. */ char **s_aliases;/* Alias list. */ int s_port;/* Port number. */ char *s_proto;/* Protocol to use. */};struct servent *getservent(void);struct servent *getservbyname(const char *name, const char *proto);struct servent *getservbyport(int port, const char *proto);void setservent(int stayopen);void endservent(void);说明:
(1) 这几个函数的原理是查询 /etc/services 文件(ubuntu下)
(2) s_port is in network byte order, you should usentohs()(not htohl(), I don't know why) to convert it to host byte order.
/** * getservent() * OS: Ubuntu 11.04 Server */#include <stdio.h>#include <stdlib.h>#include <netdb.h>#include <arpa/inet.h>static void printserv(struct servent *serv);int main(){struct servent *serv = NULL;setservent(1);while( (serv = getservent()) != NULL ){printserv(serv);printf("\n");}endservent();return 0;}static void printserv(struct servent *serv){char **p = NULL;printf("service name: %s\n", serv->s_name);for(p = serv->s_aliases; *p != NULL; p++){printf("aliase: %s\n", *p);}printf("port number: %d\n", ntohs(serv->s_port));// Note: the port here is in network byte order.//printf("port number: %x\n", serv->s_port);//printf("port number: %d\n", ntohl(serv->s_port));// Note: use ntohs(), not ntohl(), I don't know why.printf("protocol: %s\n", serv->s_proto);}/*output:service name: tcpmuxport number: 256protocol: tcpservice name: echoport number: 1792protocol: tcpservice name: echoport number: 1792protocol: udp.../etc/services:tcpmux 1/tcp # TCP port service multiplexerecho 7/tcpecho 7/udp...*/
- 获取服务名、服务端口号、服务所用协议——getservent(),getservbyname(),getservbyport()
- 名字与地址(端口)转换——gethostbyname/gethostbyaddr(getservbyname/getservbyport)
- getservbyname和getservbyport
- UNIX网络编程——名字与地址转换(gethostbyname,gethostbyaddr,getservbyname,getservbyport,getaddrinfo,getnameinfo函数)
- ORA获取服务名
- 9.通过服务名和协议名获取相关的服务信息
- 网络编程学习笔记(getservbyname和getservbyport函数)
- Mysql——启动mysql服务出现服务名无效
- 获取oracle服务器的服务名
- 用我所用,弃我所弃——Windows XP服务详解
- 获取协议名、协议号——getprotoent(),getprotobyname(),getprotobynumber()
- 获取协议名、协议号——getprotoent(),getprotobyname(),getprotobynumber()
- 服务协议
- OpenStack之服务端口号
- 查看远程服务端口号
- 服务器端口号占用导致WEB服务无法启动的解决问题
- Unix网络编程卷1第11章 名字与地址转换getservbyname 与 getservbyport函数
- 获取本机上配置好的Oracle服务名
- 实用shell小技巧
- eclipse检测不到android平板device的解决办法
- 《发现你的心灵》——于丹
- hdu ACM Steps 3.1
- (转)C++中extern “C”含义深层探索
- 获取服务名、服务端口号、服务所用协议——getservent(),getservbyname(),getservbyport()
- MySQL5.5 zip 在Windows下的安装
- android4.0.3打开系统自带应用程序
- android使用HttpURLConnection连接java ee服务器传输对象
- 音色
- Spring内核研究-管理bean的声明周期一(InitializingBean和init-method) .
- poj 1396All in All
- 音乐流服务Deezer进军亚洲市场
- maven+scala+android