1 #include <stdio.h>
2 #include <string.h>
3 #include <netdb.h>
4 #include <sys/types.h>
5 #include <netinet/in.h>
6 #include <arpa/inet.h>
7 #include <sys/time.h>
8 #include <unistd.h>
9 #include "firemake.h"
10 #include "firedns.h"
11 
12 
do_firedns_aton4(char * string)13 void do_firedns_aton4(char * string) {
14 	struct in_addr *inaddr4;
15 
16 	firestring_fprintf(stderr,"taking firedns_aton4(%s): ",string);
17 	inaddr4 = firedns_aton4(string);
18 	if (inaddr4 == NULL)
19 		firestring_fprintf(stderr,"got NULL\n");
20 	else
21 		firestring_fprintf(stderr,"%d.%d.%d.%d/%s\n",((unsigned char *)&inaddr4->s_addr)[0],
22 				((unsigned char *)&inaddr4->s_addr)[1],
23 				((unsigned char *)&inaddr4->s_addr)[2],
24 				((unsigned char *)&inaddr4->s_addr)[3],
25 				firedns_ntoa4(inaddr4));
26 }
27 
do_firedns_getip4(char * string)28 void do_firedns_getip4(char * string) {
29 	int fd;
30 	fd_set s;
31 	int n;
32 	struct timeval tv;
33 	char *m;
34 	struct in_addr addr4;
35 
36 	firestring_fprintf(stderr,"taking firedns_getip4(%s): ",string);
37 	fd = firedns_getip4(string);
38 	firestring_fprintf(stderr,"%d\n",fd);
39 	if (fd == -1)
40 		return;
41 	tv.tv_sec = 5;
42 	tv.tv_usec = 0;
43 	FD_ZERO(&s);
44 	FD_SET(fd,&s);
45 	n = select(fd + 1,&s,NULL,NULL,&tv);
46 	m = firedns_getresult(fd);
47 	if (m == NULL)
48 		firestring_fprintf(stderr,"getting result: (null)\n");
49 	else {
50 		memcpy(&addr4,m,sizeof(struct in_addr));
51 		firestring_fprintf(stderr,"getting result: %s\n",firedns_ntoa4(&addr4));
52 	}
53 }
54 
do_firedns_getip6(char * string)55 void do_firedns_getip6(char * string) {
56 	int fd;
57 	fd_set s;
58 	int n;
59 	struct timeval tv;
60 	char *m;
61 	struct in6_addr addr6;
62 
63 	firestring_fprintf(stderr,"taking firedns_getip6(%s): ",string);
64 	fd = firedns_getip6(string);
65 	firestring_fprintf(stderr,"%d\n",fd);
66 	if (fd == -1)
67 		return;
68 	tv.tv_sec = 5;
69 	tv.tv_usec = 0;
70 	FD_ZERO(&s);
71 	FD_SET(fd,&s);
72 	n = select(fd + 1,&s,NULL,NULL,&tv);
73 	m = firedns_getresult(fd);
74 	if (m == NULL)
75 		firestring_fprintf(stderr,"getting result: (null)\n");
76 	else {
77 		memcpy(&addr6,m,sizeof(struct in6_addr));
78 		firestring_fprintf(stderr,"getting result: %s\n",firedns_ntoa6(&addr6));
79 	}
80 }
81 
do_firedns_gettxt(char * string)82 void do_firedns_gettxt(char * string) {
83 	int fd;
84 	fd_set s;
85 	int n;
86 	struct timeval tv;
87 	char *m;
88 
89 	firestring_fprintf(stderr,"taking firedns_gettxt(%s): ",string);
90 	fd = firedns_gettxt(string);
91 	firestring_fprintf(stderr,"%d\n",fd);
92 	if (fd == -1)
93 		return;
94 	tv.tv_sec = 5;
95 	tv.tv_usec = 0;
96 	FD_ZERO(&s);
97 	FD_SET(fd,&s);
98 	n = select(fd + 1,&s,NULL,NULL,&tv);
99 	m = firedns_getresult(fd);
100 	firestring_fprintf(stderr,"getting result: %s\n",m);
101 }
102 
do_firedns_getmx(char * string)103 void do_firedns_getmx(char * string) {
104 	int fd;
105 	fd_set s;
106 	int n;
107 	struct timeval tv;
108 	char *m;
109 
110 	firestring_fprintf(stderr,"taking firedns_getmx(%s): ",string);
111 	fd = firedns_getmx(string);
112 	firestring_fprintf(stderr,"%d\n",fd);
113 	if (fd == -1)
114 		return;
115 	tv.tv_sec = 5;
116 	tv.tv_usec = 0;
117 	FD_ZERO(&s);
118 	FD_SET(fd,&s);
119 	n = select(fd + 1,&s,NULL,NULL,&tv);
120 	m = firedns_getresult(fd);
121 	firestring_fprintf(stderr,"getting result: %s\n",m);
122 }
123 
do_firedns_getname4(char * string)124 void do_firedns_getname4(char * string) {
125 	int fd;
126 	fd_set s;
127 	int n;
128 	struct timeval tv;
129 	char *m;
130 	struct in_addr *addr4;
131 
132 	firestring_fprintf(stderr,"taking firedns_getname4(%s): ",string);
133 	addr4 = firedns_aton4(string);
134 	if (addr4 == NULL) {
135 		firestring_fprintf(stderr,"(null)\n");
136 		return;
137 	}
138 	fd = firedns_getname4(addr4);
139 	firestring_fprintf(stderr,"%d\n",fd);
140 	if (fd == -1)
141 		return;
142 	tv.tv_sec = 5;
143 	tv.tv_usec = 0;
144 	FD_ZERO(&s);
145 	FD_SET(fd,&s);
146 	n = select(fd + 1,&s,NULL,NULL,&tv);
147 	m = firedns_getresult(fd);
148 	firestring_fprintf(stderr,"getting result: %s\n",m);
149 }
150 
do_firedns_getname6(char * string)151 void do_firedns_getname6(char * string) {
152 	int fd;
153 	fd_set s;
154 	int n;
155 	struct timeval tv;
156 	char *m;
157 	struct in6_addr *addr6;
158 
159 	firestring_fprintf(stderr,"taking firedns_getname6(%s): ",string);
160 	addr6 = firedns_aton6(string);
161 	if (addr6 == NULL) {
162 		firestring_fprintf(stderr,"(null)\n");
163 		return;
164 	}
165 	fd = firedns_getname6(addr6);
166 	firestring_fprintf(stderr,"%d\n",fd);
167 	if (fd == -1)
168 		return;
169 	tv.tv_sec = 5;
170 	tv.tv_usec = 0;
171 	FD_ZERO(&s);
172 	FD_SET(fd,&s);
173 	n = select(fd + 1,&s,NULL,NULL,&tv);
174 	m = firedns_getresult(fd);
175 	firestring_fprintf(stderr,"getting result: %s\n",m);
176 }
177 
do_firedns_aton6(char * string)178 void do_firedns_aton6(char * string) {
179 	struct in6_addr *inaddr6;
180 
181 	firestring_fprintf(stderr,"taking firedns_aton6(%s): ",string);
182 	inaddr6 = firedns_aton6(string);
183 	if (inaddr6 == NULL)
184 		firestring_fprintf(stderr,"got NULL\n");
185 	else
186 		fprintf(stderr,"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n",
187 				inaddr6->s6_addr[0],
188 				inaddr6->s6_addr[1],
189 				inaddr6->s6_addr[2],
190 				inaddr6->s6_addr[3],
191 				inaddr6->s6_addr[4],
192 				inaddr6->s6_addr[5],
193 				inaddr6->s6_addr[6],
194 				inaddr6->s6_addr[7],
195 				inaddr6->s6_addr[8],
196 				inaddr6->s6_addr[9],
197 				inaddr6->s6_addr[10],
198 				inaddr6->s6_addr[11],
199 				inaddr6->s6_addr[12],
200 				inaddr6->s6_addr[13],
201 				inaddr6->s6_addr[14],
202 				inaddr6->s6_addr[15]);
203 }
204 
do_firedns_dnsbl_lookup(char * ip,char * string)205 void do_firedns_dnsbl_lookup(char * ip, char * string) {
206 	int fd;
207 	fd_set s;
208 	int n;
209 	struct timeval tv;
210 	char *m;
211 	struct in_addr *i;
212 
213 	i = firedns_aton4(ip);
214 
215 	firestring_fprintf(stderr,"taking firedns_dnsbl_lookup(%s,%s): ",ip,string);
216 	fd = firedns_dnsbl_lookup_txt(i,string);
217 	firestring_fprintf(stderr,"%d\n",fd);
218 	if (fd == -1)
219 		return;
220 	tv.tv_sec = 5;
221 	tv.tv_usec = 0;
222 	FD_ZERO(&s);
223 	FD_SET(fd,&s);
224 	n = select(fd + 1,&s,NULL,NULL,&tv);
225 	m = firedns_getresult(fd);
226 	firestring_fprintf(stderr,"getting result: %s\n",m);
227 }
228 
229 
main()230 int main() {
231 	do_firedns_aton4("1.2.3.4");
232 	do_firedns_aton4("101.102.103.104");
233 	do_firedns_aton4("bah");
234 	do_firedns_aton4("1.2.3.400");
235 	do_firedns_aton4("206.152.182.152");
236 	do_firedns_aton4("206.152.182.152)");
237 	do_firedns_aton4("ack started...");
238 
239 	do_firedns_aton6("::");
240 	do_firedns_aton6("3ffe:b80:346:1:204:5aff:fece:7852");
241 	do_firedns_aton6("fe80::204:5aff:fece:7852");
242 	do_firedns_aton6("bah");
243 
244 	do_firedns_getip4("host.taconic.net");
245 	do_firedns_getip4("celery.n.ml.org");
246 	do_firedns_getip4("incandescent.mp3revolution.net");
247 	do_firedns_getip4("dharr.stu.rpi.edu");
248 	do_firedns_getip4("ftp.us.kernel.org");
249 	do_firedns_getip4("cool.dk");
250 
251 	do_firedns_getip6("ftp.stealth.net");
252 	do_firedns_getip6("www.ipv6.org");
253 	do_firedns_getip6("z.ip6.int");
254 
255 	do_firedns_gettxt("2.0.0.127.inputs.orbz.org");
256 	do_firedns_gettxt("2.0.0.127.outputs.orbz.org");
257 	do_firedns_gettxt("2.0.0.127.bl.spamcop.net");
258 	do_firedns_gettxt("2.0.0.127.relays.ordb.org");
259 
260 	do_firedns_getmx("spamcop.net");
261 	do_firedns_getmx("penguinhosting.net");
262 	do_firedns_getmx("taconic.net");
263 	do_firedns_getmx("microsoft.com");
264 	do_firedns_getmx("email.si");
265 	do_firedns_getmx("cool.dk");
266 
267 	do_firedns_getname4("205.231.144.10");
268 	do_firedns_getname4("208.171.237.190");
269 	do_firedns_getname4("64.28.67.150");
270 	do_firedns_getname4("64.90.162.91");
271 
272 	do_firedns_getname6("3FFE:0:1:0:0:0:C620:242");
273 	do_firedns_getname6("2001:660:1180:1:192:134:0:49");
274 	do_firedns_getname6("3FFE:50E:0:0:0:0:0:1");
275 
276 	do_firedns_dnsbl_lookup("127.0.0.2","list.dsbl.org");
277 
278 	return 0;
279 }
280