statd.c

来自「非常高效的扫描器」· C语言 代码 · 共 79 行

C
79
字号
#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 + =
减小字号Ctrl + -
显示快捷键?