xref: /plan9/sys/src/cmd/ip/hogports.c (revision b59479fc350fab15150576b68de452d0775f14f2)
1 #include <u.h>
2 #include <libc.h>
3 
4 void
hogport(char * proto,int port)5 hogport(char *proto, int port)
6 {
7 	char buf[256];
8 	char dir[40];
9 
10 	snprint(buf, sizeof(buf), "%s!%d", proto, port);
11 	if(announce(buf, dir) < 0)
12 		fprint(2, "%s: can't hog %s\n", argv0, buf);
13 }
14 
15 void
hogrange(char * str)16 hogrange(char *str)
17 {
18 	char *er, *sr;
19 	int start, end;
20 
21 	sr = strrchr(str, '!');
22 	if(sr == nil)
23 		sysfatal("bad range: %s", str);
24 	*sr++ = 0;
25 
26 	er = strchr(sr, '-');
27 	if(er == nil)
28 		er = sr;
29 	else
30 		er++;
31 
32 	start = atoi(sr);
33 	end = atoi(er);
34 	if(end < start)
35 		sysfatal("bad range: %s", sr);
36 
37 	for(; start <= end; start++)
38 		hogport(str, start);
39 }
40 
41 void
main(int argc,char ** argv)42 main(int argc, char **argv)
43 {
44 	int i;
45 
46 	ARGBEGIN{
47 	}ARGEND;
48 
49 	if(argc == 0){
50 		fprint(2, "usage: %s portrange\n", argv0);
51 		exits("usage");
52 	}
53 
54 	switch(rfork(RFREND|RFNOTEG|RFFDG|RFPROC|RFNAMEG)){
55 	case 0:
56 		close(0);
57 		close(1);
58 		break;
59 	case -1:
60 		abort(); /* "fork failed\n" */;
61 	default:
62 		_exits(0);
63 	}
64 
65 	for(i = 0; i < argc; i++)
66 		hogrange(argv[i]);
67 
68 	close(2);
69 	for(;;)
70 		sleep(10000);
71 }
72