Whois client code in C with Linux sockets

A whois client is a program that will simply fetch the whois information for a domain/ip address from the whois servers. The code over here works according to the algorithm discussed here.

Code

1 /*
2  * @brief
3  * Whois client program
4  *
5  * @details
6  * This program shall perform whois for a domain and get you the whois data of that domain
7  *
8  * @author Silver Moon ( m00n.silv3r@gmail.com )
9  * */
10  
11 #include<stdio.h> //scanf , printf
12 #include<string.h>    //strtok
13 #include<stdlib.h>    //realloc
14 #include<sys/socket.h>    //socket
15 #include<netinet/in.h> //sockaddr_in
16 #include<arpa/inet.h> //getsockname
17 #include<netdb.h> //hostent
18 #include<unistd.h>    //close
19  
20 int get_whois_data(char * , char **);
21 int hostname_to_ip(char * , char *);
22 int whois_query(char * , char * , char **);
23 char *str_replace(char *search , char *replace , char *subject );
24  
25 int main(int argc , char *argv[])
26 {
27     char domain[100] , *data = NULL;
28      
29     printf("Enter domain name to whois : ");
30     scanf("%s" , domain);
31      
32     get_whois_data(domain , &data);
33      
34     //puts(data);
35     return 0;
36 }
37  
38 /*
39  * Get the whois data of a domain
40  * */
41 int get_whois_data(char *domain , char **data)
42 {
43     char ext[1024] , *pch , *response = NULL , *response_2 = NULL , *wch , *dt;
44  
45     //remove "http://" and "www."
46     domain = str_replace("http://" "" , domain);
47     domain = str_replace("www." "" , domain);
48  
49     //get the extension , com , org , edu
50     dt = strdup(domain);
51     if(dt == NULL)
52     {
53         printf("strdup failed");
54     }
55     pch = (char*)strtok(dt , ".");
56     while(pch != NULL)
57     {
58         strcpy(ext , pch);
59         pch = strtok(NULL , ".");
60     }
61      
62     //This will tell the whois server for the particular TLD like com , org
63     if(whois_query("whois.iana.org" , ext , &response))
64     {
65         printf("Whois query failed");
66     }
67      
68     //Now analysze the response :)
69     pch = strtok(response , "\n");
70     while(pch != NULL)
71     {
72         //Check if whois line
73         wch = strstr(pch , "whois.");
74         if(wch != NULL)
75         {
76             break;
77         }
78  
79         //Next line please
80         pch = strtok(NULL , "\n");
81     }
82  
83      
84      
85     //Now we have the TLD whois server in wch , query again
86     //This will provide minimal whois information along with the parent whois server of the specific domain :)
87     free(response);
88     //This should not be necessary , but segmentation fault without this , why ?
89     response = NULL;
90     if(wch != NULL)
91     {
92         printf("\nTLD Whois server is : %s" , wch);
93         if(whois_query(wch , domain , &response))
94         {
95             printf("Whois query failed");
96         }
97     }
98     else
99     {
100         printf("\nTLD whois server for %s not found" , ext);
101         return 1;
102     }
103      
104     response_2 = strdup(response);
105  
106     //Again search for a whois server in this response. :)
107     pch = strtok(response , "\n");
108     while(pch != NULL)
109     {
110         //Check if whois line
111         wch = strstr(pch , "whois.");
112         if(wch != NULL)
113         {
114             break;
115         }
116  
117         //Next line please
118         pch = strtok(NULL , "\n");
119     }
120  
121  
122     /*
123      * If a registrar whois server is found then query it
124      * */
125     if(wch)
126     {
127         //Now we have the registrar whois server , this has the direct full information of the particular domain
128         //so lets query again
129          
130         printf("\nRegistrar Whois server is : %s" , wch);
131          
132         if(whois_query(wch , domain , &response))
133         {
134             printf("Whois query failed");
135         }
136          
137         printf("\n%s" , response);
138     }
139      
140     /*
141      * otherwise echo the output from the previous whois result
142      * */
143     else
144     {
145         printf("%s" , response_2);
146     }
147     return 0;
148 }
149  
150 /*
151  * Perform a whois query to a server and record the response
152  * */
153 int whois_query(char *server , char *query , char **response)
154 {
155     char ip[32] , message[100] , buffer[1500];
156     int sock , read_size , total_size = 0;
157     struct sockaddr_in dest;
158       
159     sock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
160       
161     //Prepare connection structures :)
162     memset( &dest , 0 , sizeof(dest) );
163     dest.sin_family = AF_INET;
164       
165     printf("\nResolving %s..." , server);
166     if(hostname_to_ip(server , ip))
167     {
168         printf("Failed");
169         return 1;
170     }
171     printf("%s" , ip);   
172     dest.sin_addr.s_addr = inet_addr( ip );
173     dest.sin_port = htons( 43 );
174  
175     //Now connect to remote server
176     if(connect( sock , (const struct sockaddr*) &dest , sizeof(dest) ) < 0)
177     {
178         perror("connect failed");
179     }
180      
181     //Now send some data or message
182     printf("\nQuerying for ... %s ..." , query);
183     sprintf(message , "%s\r\n" , query);
184     if( send(sock , message , strlen(message) , 0) < 0)
185     {
186         perror("send failed");
187     }
188      
189     //Now receive the response
190     while( (read_size = recv(sock , buffer , sizeof(buffer) , 0) ) )
191     {
192         *response = realloc(*response , read_size + total_size);
193         if(*response == NULL)
194         {
195             printf("realloc failed");
196         }
197         memcpy(*response + total_size , buffer , read_size);
198         total_size += read_size;
199     }
200     printf("Done");
201     fflush(stdout);
202      
203     *response = realloc(*response , total_size + 1);
204     *(*response + total_size) = '\0';
205      
206     close(sock);
207     return 0;
208 }
209  
210 /*
211  * @brief
212  * Get the ip address of a given hostname
213  *
214  * */
215 int hostname_to_ip(char * hostname , char* ip)
216 {
217     struct hostent *he;
218     struct in_addr **addr_list;
219     int i;
220          
221     if ( (he = gethostbyname( hostname ) ) == NULL)
222     {
223         // get the host info
224         herror("gethostbyname");
225         return 1;
226     }
227  
228     addr_list = (struct in_addr **) he->h_addr_list;
229      
230     for(i = 0; addr_list[i] != NULL; i++)
231     {
232         //Return the first one;
233         strcpy(ip , inet_ntoa(*addr_list[i]) );
234         return 0;
235     }
236      
237     return 0;
238 }
239  
240 /*
241  * Search and replace a string with another string , in a string
242  * */
243 char *str_replace(char *search , char *replace , char *subject)
244 {
245     char  *p = NULL , *old = NULL , *new_subject = NULL ;
246     int c = 0 , search_size;
247      
248     search_size = strlen(search);
249      
250     //Count how many occurences
251     for(p = strstr(subject , search) ; p != NULL ; p = strstr(p + search_size , search))
252     {
253         c++;
254     }
255      
256     //Final size
257     c = ( strlen(replace) - search_size )*c + strlen(subject);
258      
259     //New subject with new size
260     new_subject = malloc( c );
261      
262     //Set it to blank
263     strcpy(new_subject , "");
264      
265     //The start position
266     old = subject;
267      
268     for(p = strstr(subject , search) ; p != NULL ; p = strstr(p + search_size , search))
269     {
270         //move ahead and copy some text from original subject , from a certain position
271         strncpy(new_subject + strlen(new_subject) , old , p - old);
272          
273         //move ahead and copy the replacement text
274         strcpy(new_subject + strlen(new_subject) , replace);
275          
276         //The new start position after this search match
277         old = p + search_size;
278     }
279      
280     //Copy the part after the last search match
281     strcpy(new_subject + strlen(new_subject) , old);
282      
283     return new_subject;
284 }

hostname_to_ip – This is a simple function to get an IP of a domain.
str_replace – This is a generic string processing function that is used to search for a string in another big string and replace it with another string.

Output

1 Enter domain name to whois : www.wikipedia.org
2  
3 Resolving whois.iana.org...192.0.47.59
4 Querying for ... org ...Done
5 TLD Whois server is : whois.pir.org
6 Resolving whois.pir.org...149.17.192.7
7 Querying for ... wikipedia.org ...DoneAccess to .ORG WHOIS information is provided to assist persons in
8 determining the contents of a domain name registration record in the
9 Public Interest Registry registry database. The data in this record is provided by
10 Public Interest Registry for informational purposes only, and Public Interest Registry does not
11 guarantee its accuracy.  This service is intended only for query-based
12 access. You agree that you will use this data only for lawful purposes
13 and that, under no circumstances will you use this data to: (a) allow,
14 enable, or otherwise support the transmission by e-mail, telephone, or
15 facsimile of mass unsolicited, commercial advertising or solicitations
16 to entities other than the data recipient's own existing customers; or
17 (b) enable high volume, automated, electronic processes that send
18 queries or data to the systems of Registry Operator, a Registrar, or
19 Afilias except as reasonably necessary to register domain names or
20 modify existing registrations. All rights reserved. Public Interest Registry reserves
21 the right to modify these terms at any time. By submitting this query,
22 you agree to abide by this policy.
23  
24 Domain ID:D51687756-LROR
25 Domain Name:WIKIPEDIA.ORG
26 Created On:13-Jan-2001 00:12:14 UTC
27 Last Updated On:02-Dec-2009 20:57:17 UTC
28 Expiration Date:13-Jan-2015 00:12:14 UTC
29 Sponsoring Registrar:GoDaddy.com, Inc. (R91-LROR)
30 Status:CLIENT DELETE PROHIBITED
31 Status:CLIENT RENEW PROHIBITED
32 Status:CLIENT TRANSFER PROHIBITED
33 Status:CLIENT UPDATE PROHIBITED
34 Registrant ID:CR31094073
35 Registrant Name:DNS Admin
36 Registrant Organization:Wikimedia Foundation, Inc.
37 Registrant Street1:149 New Montgomery Street
38 Registrant Street2:Third Floor
39 Registrant Street3:
40 Registrant City:San Francisco
41 Registrant State/Province:California
42 Registrant Postal Code:94105
43 Registrant Country:US
44 Registrant Phone:+1.4158396885
45 Registrant Phone Ext.:
46 Registrant FAX:+1.4158820495
47 Registrant FAX Ext.:
48 Registrant Email:dns-admin@wikimedia.org
49 Admin ID:CR31094075
50 Admin Name:DNS Admin
51 Admin Organization:Wikimedia Foundation, Inc.
52 Admin Street1:149 New Montgomery Street
53 Admin Street2:Third Floor
54 Admin Street3:
55 Admin City:San Francisco
56 Admin State/Province:California
57 Admin Postal Code:94105
58 Admin Country:US
59 Admin Phone:+1.4158396885
60 Admin Phone Ext.:
61 Admin FAX:+1.4158820495
62 Admin FAX Ext.:
63 Admin Email:dns-admin@wikimedia.org
64 Tech ID:CR31094074
65 Tech Name:DNS Admin
66 Tech Organization:Wikimedia Foundation, Inc.
67 Tech Street1:149 New Montgomery Street
68 Tech Street2:Third Floor
69 Tech Street3:
70 Tech City:San Francisco
71 Tech State/Province:California
72 Tech Postal Code:94105
73 Tech Country:US
74 Tech Phone:+1.4158396885
75 Tech Phone Ext.:
76 Tech FAX:+1.4158820495
77 Tech FAX Ext.:
78 Tech Email:dns-admin@wikimedia.org
79 Name Server:NS0.WIKIMEDIA.ORG
80 Name Server:NS1.WIKIMEDIA.ORG
81 Name Server:NS2.WIKIMEDIA.ORG
82 Name Server:
83 Name Server:
84 Name Server:
85 Name Server:
86 Name Server:
87 Name Server:
88 Name Server:
89 Name Server:
90 Name Server:
91 Name Server:
92 DNSSEC:Unsigned

A whois client is a program that will simply fetch the whois information for a domain/ip address from the whois servers. The code over here works according to the algorithm discussed here.

Code

1 /*
2  * @brief
3  * Whois client program
4  *
5  * @details
6  * This program shall perform whois for a domain and get you the whois data of that domain
7  *
8  * @author Silver Moon ( m00n.silv3r@gmail.com )
9  * */
10  
11 #include<stdio.h> //scanf , printf
12 #include<string.h>    //strtok
13 #include<stdlib.h>    //realloc
14 #include<sys/socket.h>    //socket
15 #include<netinet/in.h> //sockaddr_in
16 #include<arpa/inet.h> //getsockname
17 #include<netdb.h> //hostent
18 #include<unistd.h>    //close
19  
20 int get_whois_data(char * , char **);
21 int hostname_to_ip(char * , char *);
22 int whois_query(char * , char * , char **);
23 char *str_replace(char *search , char *replace , char *subject );
24  
25 int main(int argc , char *argv[])
26 {
27     char domain[100] , *data = NULL;
28      
29     printf("Enter domain name to whois : ");
30     scanf("%s" , domain);
31      
32     get_whois_data(domain , &data);
33      
34     //puts(data);
35     return 0;
36 }
37  
38 /*
39  * Get the whois data of a domain
40  * */
41 int get_whois_data(char *domain , char **data)
42 {
43     char ext[1024] , *pch , *response = NULL , *response_2 = NULL , *wch , *dt;
44  
45     //remove "http://" and "www."
46     domain = str_replace("http://" "" , domain);
47     domain = str_replace("www." "" , domain);
48  
49     //get the extension , com , org , edu
50     dt = strdup(domain);
51     if(dt == NULL)
52     {
53         printf("strdup failed");
54     }
55     pch = (char*)strtok(dt , ".");
56     while(pch != NULL)
57     {
58         strcpy(ext , pch);
59         pch = strtok(NULL , ".");
60     }
61      
62     //This will tell the whois server for the particular TLD like com , org
63     if(whois_query("whois.iana.org" , ext , &response))
64     {
65         printf("Whois query failed");
66     }
67      
68     //Now analysze the response :)
69     pch = strtok(response , "\n");
70     while(pch != NULL)
71     {
72         //Check if whois line
73         wch = strstr(pch , "whois.");
74         if(wch != NULL)
75         {
76             break;
77         }
78  
79         //Next line please
80         pch = strtok(NULL , "\n");
81     }
82  
83      
84      
85     //Now we have the TLD whois server in wch , query again
86     //This will provide minimal whois information along with the parent whois server of the specific domain :)
87     free(response);
88     //This should not be necessary , but segmentation fault without this , why ?
89     response = NULL;
90     if(wch != NULL)
91     {
92         printf("\nTLD Whois server is : %s" , wch);
93         if(whois_query(wch , domain , &response))
94         {
95             printf("Whois query failed");
96         }
97     }
98     else
99     {
100         printf("\nTLD whois server for %s not found" , ext);
101         return 1;
102     }
103      
104     response_2 = strdup(response);
105  
106     //Again search for a whois server in this response. :)
107     pch = strtok(response , "\n");
108     while(pch != NULL)
109     {
110         //Check if whois line
111         wch = strstr(pch , "whois.");
112         if(wch != NULL)
113         {
114             break;
115         }
116  
117         //Next line please
118         pch = strtok(NULL , "\n");
119     }
120  
121  
122     /*
123      * If a registrar whois server is found then query it
124      * */
125     if(wch)
126     {
127         //Now we have the registrar whois server , this has the direct full information of the particular domain
128         //so lets query again
129          
130         printf("\nRegistrar Whois server is : %s" , wch);
131          
132         if(whois_query(wch , domain , &response))
133         {
134             printf("Whois query failed");
135         }
136          
137         printf("\n%s" , response);
138     }
139      
140     /*
141      * otherwise echo the output from the previous whois result
142      * */
143     else
144     {
145         printf("%s" , response_2);
146     }
147     return 0;
148 }
149  
150 /*
151  * Perform a whois query to a server and record the response
152  * */
153 int whois_query(char *server , char *query , char **response)
154 {
155     char ip[32] , message[100] , buffer[1500];
156     int sock , read_size , total_size = 0;
157     struct sockaddr_in dest;
158       
159     sock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
160       
161     //Prepare connection structures :)
162     memset( &dest , 0 , sizeof(dest) );
163     dest.sin_family = AF_INET;
164       
165     printf("\nResolving %s..." , server);
166     if(hostname_to_ip(server , ip))
167     {
168         printf("Failed");
169         return 1;
170     }
171     printf("%s" , ip);   
172     dest.sin_addr.s_addr = inet_addr( ip );
173     dest.sin_port = htons( 43 );
174  
175     //Now connect to remote server
176     if(connect( sock , (const struct sockaddr*) &dest , sizeof(dest) ) < 0)
177     {
178         perror("connect failed");
179     }
180      
181     //Now send some data or message
182     printf("\nQuerying for ... %s ..." , query);
183     sprintf(message , "%s\r\n" , query);
184     if( send(sock , message , strlen(message) , 0) < 0)
185     {
186         perror("send failed");
187     }
188      
189     //Now receive the response
190     while( (read_size = recv(sock , buffer , sizeof(buffer) , 0) ) )
191     {
192         *response = realloc(*response , read_size + total_size);
193         if(*response == NULL)
194         {
195             printf("realloc failed");
196         }
197         memcpy(*response + total_size , buffer , read_size);
198         total_size += read_size;
199     }
200     printf("Done");
201     fflush(stdout);
202      
203     *response = realloc(*response , total_size + 1);
204     *(*response + total_size) = '\0';
205      
206     close(sock);
207     return 0;
208 }
209  
210 /*
211  * @brief
212  * Get the ip address of a given hostname
213  *
214  * */
215 int hostname_to_ip(char * hostname , char* ip)
216 {
217     struct hostent *he;
218     struct in_addr **addr_list;
219     int i;
220          
221     if ( (he = gethostbyname( hostname ) ) == NULL)
222     {
223         // get the host info
224         herror("gethostbyname");
225         return 1;
226     }
227  
228     addr_list = (struct in_addr **) he->h_addr_list;
229      
230     for(i = 0; addr_list[i] != NULL; i++)
231     {
232         //Return the first one;
233         strcpy(ip , inet_ntoa(*addr_list[i]) );
234         return 0;
235     }
236      
237     return 0;
238 }
239  
240 /*
241  * Search and replace a string with another string , in a string
242  * */
243 char *str_replace(char *search , char *replace , char *subject)
244 {
245     char  *p = NULL , *old = NULL , *new_subject = NULL ;
246     int c = 0 , search_size;
247      
248     search_size = strlen(search);
249      
250     //Count how many occurences
251     for(p = strstr(subject , search) ; p != NULL ; p = strstr(p + search_size , search))
252     {
253         c++;
254     }
255      
256     //Final size
257     c = ( strlen(replace) - search_size )*c + strlen(subject);
258      
259     //New subject with new size
260     new_subject = malloc( c );
261      
262     //Set it to blank
263     strcpy(new_subject , "");
264      
265     //The start position
266     old = subject;
267      
268     for(p = strstr(subject , search) ; p != NULL ; p = strstr(p + search_size , search))
269     {
270         //move ahead and copy some text from original subject , from a certain position
271         strncpy(new_subject + strlen(new_subject) , old , p - old);
272          
273         //move ahead and copy the replacement text
274         strcpy(new_subject + strlen(new_subject) , replace);
275          
276         //The new start position after this search match
277         old = p + search_size;
278     }
279      
280     //Copy the part after the last search match
281     strcpy(new_subject + strlen(new_subject) , old);
282      
283     return new_subject;
284 }

hostname_to_ip – This is a simple function to get an IP of a domain.
str_replace – This is a generic string processing function that is used to search for a string in another big string and replace it with another string.

Output

1 Enter domain name to whois : www.wikipedia.org
2  
3 Resolving whois.iana.org...192.0.47.59
4 Querying for ... org ...Done
5 TLD Whois server is : whois.pir.org
6 Resolving whois.pir.org...149.17.192.7
7 Querying for ... wikipedia.org ...DoneAccess to .ORG WHOIS information is provided to assist persons in
8 determining the contents of a domain name registration record in the
9 Public Interest Registry registry database. The data in this record is provided by
10 Public Interest Registry for informational purposes only, and Public Interest Registry does not
11 guarantee its accuracy.  This service is intended only for query-based
12 access. You agree that you will use this data only for lawful purposes
13 and that, under no circumstances will you use this data to: (a) allow,
14 enable, or otherwise support the transmission by e-mail, telephone, or
15 facsimile of mass unsolicited, commercial advertising or solicitations
16 to entities other than the data recipient's own existing customers; or
17 (b) enable high volume, automated, electronic processes that send
18 queries or data to the systems of Registry Operator, a Registrar, or
19 Afilias except as reasonably necessary to register domain names or
20 modify existing registrations. All rights reserved. Public Interest Registry reserves
21 the right to modify these terms at any time. By submitting this query,
22 you agree to abide by this policy.
23  
24 Domain ID:D51687756-LROR
25 Domain Name:WIKIPEDIA.ORG
26 Created On:13-Jan-2001 00:12:14 UTC
27 Last Updated On:02-Dec-2009 20:57:17 UTC
28 Expiration Date:13-Jan-2015 00:12:14 UTC
29 Sponsoring Registrar:GoDaddy.com, Inc. (R91-LROR)
30 Status:CLIENT DELETE PROHIBITED
31 Status:CLIENT RENEW PROHIBITED
32 Status:CLIENT TRANSFER PROHIBITED
33 Status:CLIENT UPDATE PROHIBITED
34 Registrant ID:CR31094073
35 Registrant Name:DNS Admin
36 Registrant Organization:Wikimedia Foundation, Inc.
37 Registrant Street1:149 New Montgomery Street
38 Registrant Street2:Third Floor
39 Registrant Street3:
40 Registrant City:San Francisco
41 Registrant State/Province:California
42 Registrant Postal Code:94105
43 Registrant Country:US
44 Registrant Phone:+1.4158396885
45 Registrant Phone Ext.:
46 Registrant FAX:+1.4158820495
47 Registrant FAX Ext.:
48 Registrant Email:dns-admin@wikimedia.org
49 Admin ID:CR31094075
50 Admin Name:DNS Admin
51 Admin Organization:Wikimedia Foundation, Inc.
52 Admin Street1:149 New Montgomery Street
53 Admin Street2:Third Floor
54 Admin Street3:
55 Admin City:San Francisco
56 Admin State/Province:California
57 Admin Postal Code:94105
58 Admin Country:US
59 Admin Phone:+1.4158396885
60 Admin Phone Ext.:
61 Admin FAX:+1.4158820495
62 Admin FAX Ext.:
63 Admin Email:dns-admin@wikimedia.org
64 Tech ID:CR31094074
65 Tech Name:DNS Admin
66 Tech Organization:Wikimedia Foundation, Inc.
67 Tech Street1:149 New Montgomery Street
68 Tech Street2:Third Floor
69 Tech Street3:
70 Tech City:San Francisco
71 Tech State/Province:California
72 Tech Postal Code:94105
73 Tech Country:US
74 Tech Phone:+1.4158396885
75 Tech Phone Ext.:
76 Tech FAX:+1.4158820495
77 Tech FAX Ext.:
78 Tech Email:dns-admin@wikimedia.org
79 Name Server:NS0.WIKIMEDIA.ORG
80 Name Server:NS1.WIKIMEDIA.ORG
81 Name Server:NS2.WIKIMEDIA.ORG
82 Name Server:
83 Name Server:
84 Name Server:
85 Name Server:
86 Name Server:
87 Name Server:
88 Name Server:
89 Name Server:
90 Name Server:
91 Name Server:
92 DNSSEC:Unsigned
时间: 2024-10-26 15:10:01

Whois client code in C with Linux sockets的相关文章

Tcp syn portscan code in C with Linux sockets

Port Scanning searches for open ports on a remote system. The basic logic for a portscanner would be to connect to the port we want to check. If the socket gives a valid connection without any error then the port is open , closed otherwise (or inacce

Packet Sniffer Code in C using Linux Sockets (BSD) – Part 2

In the previous part we made a simple sniffer which created a raw socket and started receiving on it. But it had few drawbacks : 1. Could sniff only incoming data. 2. Could sniff only TCP or UDP or ICMP or any one protocol packets at a time. 3. Provi

C Packet Sniffer Code with Libpcap and Linux Sockets (BSD)

Libpcap is a packet capture library which can be used to sniff packets or network traffic over a network interface. Pcap Documentation gives a description of the methods and data structures available in the libpcap library. To install libpcap on your

Get ip address from hostname in C using Linux sockets

Here are 2 methods to get the ip address of a hostname : The first method uses the traditional gethostbyname function to retrieve information about a hostname/domain name.Code 1 #include<stdio.h> //printf 2 #include<string.h> //memset 3 #inclu

Raw Sockets programming on Linux with C

Raw sockets or packets contain user defined IP headers. Its as simple as that. Here we shall consider sending a raw tcp packets. A tcp packets has 3 parts : IP header + TCP header + data The structure of IP Header as given by RFC 791 is : 1 0        

如何在Linux上使用Visual Studio Code

为了向大家介绍 "Linux 上的 ASP.NET Core",我需要一个 Linux VM,通过远程桌面连上去运行 Visual Studio Code.数小时后,我被一堆问题搞得头昏脑胀,最后终于能搭建了一个可用于演示的 VM.这篇文章向读者们简述了我在 Linux VM 中运行 Visual Studio Code 的经验. 这篇文章主要关注怎样为 Visual Studio Code 设置虚拟化的 Linux 环境.经过一些曲折,我终于在 Kubuntu 上运行起来了.为什么是

SYN Flood DOS Attack with C Source Code

TCP/IP 3-way handshake is done to establish a connection between a client and a server. The process is : 1. Client –SYN Packet–> Server 2. Server –SYN/ACK Packet –> Client 3. Client –ACK Packet –> Server The above 3 steps are followed to establis

Linux操作系统上Samba常见问题解答

一.由Linux向windows提供文件/目录及打印机共享. 在Linux服务器上的Samba运行起来以后,Linux就相当于一台文件及打印服务器,向windows和Linux Samba客户提供文件及打印服务.工作在共享模式或者用户模式下的两种方法较为常见(Security=share or Security=user) ,其中有以下常见问题. 1.共享模式时从windows 98客户端不能从网上邻居中看到服务器,或者看到后不能点击进入共享资源说密码不对等等. a.没有去掉行guest acc

Linux Device Tree(二):基本概念

一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用来解决什么问题的)请参考引入Device Tree的原因,本文主要是介绍Device Tree的基础概念. 简单的说,如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file.通过DTC(Device Tree Compiler),可以将这些适合人类阅读的Device Tree source file变成适合机器处理的Device Tr