ReactOS 0.4.15-dev-7788-g1ad9096
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}
#define exit(n)
Definition: config.h:202
int PASCAL FAR WSACleanup(void)
Definition: startup.c:60

◆ 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
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
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
#define argv
Definition: mplay32.c:18
char * host
Definition: whois.c:55
int optset
Definition: whois.c:56
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}
_STLP_DECLSPEC complex< float > _STLP_CALL sin(const complex< float > &)
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
int putchar(int c)
Definition: crtsupp.c:12
#define NULL
Definition: types.h:112
static void cleanup(void)
Definition: main.c:1335
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
Definition: recv.c:23
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
Definition: send.c:23
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
#define SOCK_STREAM
Definition: tcpip.h:118
unsigned short WORD
Definition: ntddk_ex.h:93
#define printf
Definition: freeldr.h:93
PHOSTENT WSAAPI gethostbyname(IN const char FAR *name)
Definition: getxbyxx.c:221
PSERVENT WSAAPI getservbyname(IN const char FAR *name, IN const char FAR *proto)
Definition: getxbyxx.c:500
GLdouble s
Definition: gl.h:2039
_CRTIMP void __cdecl perror(_In_opt_z_ const char *_ErrMsg)
#define stderr
Definition: stdio.h:100
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const WCHAR sp[]
Definition: suminfo.c:287
#define err(...)
#define memset(x, y, z)
Definition: compat.h:39
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
Definition: socklife.c:36
SOCKET WSAAPI socket(IN INT af, IN INT type, IN INT protocol)
Definition: socklife.c:143
char * h_name
Definition: winsock.h:134
short h_length
Definition: winsock.h:137
short h_addrtype
Definition: winsock.h:136
#define MAKEWORD(a, b)
Definition: typedefs.h:248
static void usage()
Definition: whois.c:175
void getwhoisserver(int argc, char **argv)
Definition: whois.c:60
int PASCAL FAR WSAGetLastError(void)
Definition: dllmain.c:112
#define INVALID_SOCKET
Definition: winsock.h:332
UINT_PTR SOCKET
Definition: winsock.h:47

◆ 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}

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(), build_proxy_connect_string(), 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(), 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_default_format(), test_QueryInterface(), test_TxDraw(), test_TxGetNaturalSize(), test_TxGetScroll(), 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().