hogports.c 989 B

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