📄 statd.c
字号:
#include <stdio.h>#include <netdb.h>#include <stdlib.h>#include <signal.h>#include <rpc/rpc.h>#include <arpa/inet.h>#include <sys/socket.h>#include <netinet/in.h>#include <rpc/pmap_prot.h>#include <rpc/pmap_clnt.h>#define ERROR -1int woopy(int s);int statd(char *host);unsigned long int res(char *p);int woopy(int s) // EINTR @*&()!~@*$)({ return 0;}int statd(char *host){ struct sockaddr_in server_addr; struct pmaplist *head = NULL; int sockett = RPC_ANYSOCK; struct timeval minutetimeout; register CLIENT *client; struct rpcent *rpc; server_addr.sin_addr.s_addr=inet_addr(host); server_addr.sin_family=AF_INET; server_addr.sin_port = htons(PMAPPORT); minutetimeout.tv_sec = 15; minutetimeout.tv_usec = 0; /* cause clnttcp_create uses connect() */ signal(SIGALRM,woopy); alarm(15); if ((client = clnttcp_create(&server_addr, PMAPPROG, PMAPVERS, &sockett, 50, 500)) == NULL) { alarm(0); signal(SIGALRM,SIG_DFL); return 0; } alarm(0); signal(SIGALRM,SIG_DFL); if (clnt_call(client, PMAPPROC_DUMP, (xdrproc_t) xdr_void, NULL, (xdrproc_t) xdr_pmaplist, &head, minutetimeout) != RPC_SUCCESS) return 0; if (head != NULL) for (; head != NULL; head = head->pml_next) if((rpc = getrpcbynumber(head->pml_map.pm_prog))) if(strcmp(rpc->r_name,"rstatd") == 0) return 1; return 0;}unsigned long int res(char *p){ struct hostent *h; h=gethostbyname(p); if(h!=NULL) { return h->h_addr; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -