ReactOS  0.4.13-dev-455-g28ed234
whois.c File Reference
#include <windef.h>
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
Include dependency graph for whois.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 

Functions

static void usage ()
 
static void cleanup (int iExitCode)
 
void getwhoisserver (int argc, char **argv)
 
int main (int argc, char **argv)
 

Variables

static char NICHOST [] = "whois.internic.net"
 
charhost = NULL
 
int optset = 0
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 42 of file whois.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 40 of file whois.c.

Function Documentation

◆ cleanup()

static void cleanup ( int  iExitCode)
static

Definition at line 181 of file whois.c.

182 {
183  WSACleanup();
184  exit(iExitCode);
185 }
INT WSAAPI WSACleanup(VOID)
Definition: startup.c:60
void exit(int exitcode)
Definition: _exit.c:33

Referenced by main(), and usage().

◆ getwhoisserver()

void getwhoisserver ( int  argc,
char **  argv 
)

Definition at line 60 of file whois.c.

61 {
62  int i = 1;
63 
64  while(i < argc)
65  {
66  if (!strcmp(argv[i], "-h"))
67  {
68  if (i + 2 < argc)
69  {
70  host = argv[i +1];
71  optset = i + 1;
72  }
73  else
74  {
75  optset = argc;
76  }
77  return;
78  }
79  i++;
80  }
81  host = NICHOST;
82  optset = 1;
83 }
static int argc
Definition: ServiceArgs.c:12
char * host
Definition: whois.c:55
#define argv
Definition: mplay32.c:18
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
int optset
Definition: whois.c:56
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
static char NICHOST[]
Definition: whois.c:54

Referenced by main().

◆ main()

int main ( int argc  ,
char **  argv 
)

Definition at line 85 of file whois.c.

86 {
87  char ch;
88  struct sockaddr_in sin;
89  struct hostent *hp;
90  struct servent *sp;
91  SOCKET s;
92 
93  WORD wVersionRequested;
94  WSADATA wsaData;
95  int err;
96 
98  argc -= optset;
99  argv += optset;
100 
101  if (!host || !argc)
102  usage();
103 
104  /* Start winsock */
105  wVersionRequested = MAKEWORD( 1, 1 );
106  err = WSAStartup( wVersionRequested, &wsaData );
107  if ( err != 0 )
108  {
109  /* Tell the user that we couldn't find a usable */
110  /* WinSock DLL. */
111  perror("whois: WSAStartup failed");
112  cleanup(1);
113  }
114 
115  hp = gethostbyname(host);
116  if (hp == NULL) {
117  (void)fprintf(stderr, "whois: %s: ", host);
118  cleanup(1);
119  }
120  host = hp->h_name;
121 
122  s = socket(hp->h_addrtype, SOCK_STREAM, 0);
123  if (s == INVALID_SOCKET) {
124  perror("whois: socket");
125  cleanup(1);
126  }
127 
128  memset(/*(caddr_t)*/&sin, 0, sizeof(sin));
129  sin.sin_family = hp->h_addrtype;
130  if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
131  perror("whois: bind");
132  cleanup(1);
133  }
134 
135  memcpy((char *)&sin.sin_addr, hp->h_addr, hp->h_length);
136  sp = getservbyname("nicname", "tcp");
137  if (sp == NULL) {
138  (void)fprintf(stderr, "whois: nicname/tcp: unknown service\n");
139  cleanup(1);
140  }
141 
142  sin.sin_port = sp->s_port;
143 
144  /* have network connection; identify the host connected with */
145  (void)printf("[%s]\n", hp->h_name);
146 
147  if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
148  fprintf(stderr, "whois: connect error = %d\n", WSAGetLastError());
149  cleanup(1);
150  }
151 
152  /* WinSock doesn't allow using a socket as a file descriptor. */
153  /* Have to use send() and recv(). whois will drop connection. */
154 
155  /* For each request */
156  while (argc-- > 1)
157  {
158  /* Send the request */
159  send(s, *argv, strlen(*argv), 0);
160  send(s, " ", 1, 0);
161  argv++;
162  }
163  /* Send the last request */
164  send(s, *argv, strlen(*argv), 0);
165  send(s, "\r\n", 2, 0);
166 
167  /* Receive anything and print it */
168  while (recv(s, &ch, 1, 0) == 1)
169  putchar(ch);
170 
171  cleanup(0);
172  return 0;
173 }
static void usage()
Definition: whois.c:175
static int argc
Definition: ServiceArgs.c:12
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
SOCKET WSAAPI socket(IN INT af, IN INT type, IN INT protocol)
Definition: socklife.c:143
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define MAKEWORD(a, b)
Definition: typedefs.h:247
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
Definition: socklife.c:36
char * h_name
Definition: winsock.h:134
char * host
Definition: whois.c:55
void getwhoisserver(int argc, char **argv)
Definition: whois.c:60
#define argv
Definition: mplay32.c:18
INT WSAAPI connect(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
Definition: sockctrl.c:23
_CRTIMP void __cdecl perror(_In_opt_z_ const char *_ErrMsg)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
int putchar(int c)
Definition: crtsupp.c:12
short h_length
Definition: winsock.h:137
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
smooth NULL
Definition: ftsmooth.c:416
int optset
Definition: whois.c:56
PHOSTENT WSAAPI gethostbyname(IN const char FAR *name)
Definition: getxbyxx.c:221
INT WSAAPI WSAGetLastError(VOID)
Definition: dllmain.c:112
PSERVENT WSAAPI getservbyname(IN const char FAR *name, IN const char FAR *proto)
Definition: getxbyxx.c:500
#define INVALID_SOCKET
Definition: winsock.h:332
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
Definition: send.c:23
unsigned short WORD
Definition: ntddk_ex.h:93
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLdouble s
Definition: gl.h:2039
#define err(...)
static void cleanup(int iExitCode)
Definition: whois.c:181
short h_addrtype
Definition: winsock.h:136
FILE * stderr
static const WCHAR sp[]
Definition: suminfo.c:288
UINT_PTR SOCKET
Definition: winsock.h:47
_STLP_DECLSPEC complex< float > _STLP_CALL sin(const complex< float > &)
#define SOCK_STREAM
Definition: tcpip.h:118
#define memset(x, y, z)
Definition: compat.h:39
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
Definition: recv.c:23
#define printf
Definition: config.h:203

◆ usage()

static void usage ( void  )
static

Definition at line 175 of file whois.c.

176 {
177  (void)fprintf(stderr, "usage: whois [-h hostname] name ...\n");
178  cleanup(1);
179 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
static void cleanup(int iExitCode)
Definition: whois.c:181
FILE * stderr

Referenced by main().

Variable Documentation

◆ host

char* host = NULL

Definition at line 55 of file whois.c.

Referenced by __rpcb_findaddr_timed(), _CorExeMain(), _open_simple_request(), add_cache(), add_host_header(), AtlAxGetHost(), cache_authorization(), cache_basic_authorization(), canonicalize_reg_name(), check_cache(), check_load_safety(), check_script_safety(), ClrCreateManagedInstance(), CLRRuntimeInfo_GetInterface(), compose_request_url(), connection_collector(), ConnectToReactOSWebsite(), cookie_parse_url(), create_monodata(), create_plugin_host(), create_windowed_editor(), detach_plugin_host(), DtcGetTransactionManager(), DtcGetTransactionManagerExA(), DtcGetTransactionManagerExW(), embed_plugin_object(), find_domain_name(), generate_security_id(), get_cookie(), get_cookie_header(), get_plugin_disp(), get_pos_rect(), get_server(), get_zone_from_domains(), getclnthandle(), GetHostEntry(), getnameinfo(), GetOurHostName(), getrpcport(), getwhoisserver(), hookup(), host2netname(), HTTP_DoAuthorization(), HTTP_HandleRedirect(), HTTP_HttpSendRequestW(), HTTP_InsertAuthorization(), http_post(), HttpProtocol_open_request(), init_logger_addr(), initialize_plugin_object(), INTERNET_InternetOpenUrlW(), InternetCheckConnectionW(), InternetCrackUrlA(), InternetCrackUrlW_test(), InternetCreateUrlA_test(), InternetGetCookieExW(), InternetSetCookieExW(), InternetTransport_Connect(), invoke_plugin_prop(), licence_send_new_licence_request(), licence_send_request(), load_plugin(), load_prop_bag(), TMapLoader::LoadCharMap(), login(), LogOpen(), LookupCmd(), main(), NetBTinetResolve(), netconn_create(), netfinger(), NPP_Destroy(), NPP_SetWindow(), nsURI_SetHost(), open_connection(), open_http(), OpenControlConnection(), processFile(), ReallyFixupVTable(), release_host(), retrieve_cached_authorization(), retrieve_cached_basic_authorization(), rpc_call(), rpcb_getaddr(), rpcb_getmaps(), rpcb_gettime(), rpcrt4_ncacn_ip_tcp_open(), rpcrt4_protseq_ncacn_ip_tcp_open_endpoint(), ruserpass(), search_domain_for_zone(), search_for_domain_mapping(), setpeer(), SpoolX(), START_TEST(), test_communication(), test_QueryInterface(), test_TxDraw(), test_TxGetNaturalSize(), test_TxGetText(), test_TxSetText(), update_plugin_window(), update_readystate(), WinHttpCrackUrl_test(), WspiapiGetNameInfo(), and xmlParse3986Host().

◆ NICHOST

char NICHOST[] = "whois.internic.net"
static

Definition at line 54 of file whois.c.

Referenced by getwhoisserver().

◆ optset

int optset = 0

Definition at line 56 of file whois.c.

Referenced by getwhoisserver(), and main().