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