Esempio n. 1
0
/* TCPIP マネージャの初期化 
 */
ER
init_tcpip ()
{
  if (!initialized)
    {
      init_timer ();
      init_link ();
      init_ip ();
      init_udp ();
      init_tcp ();
      init_arp ();

      initialized = 1;
    }

  return (E_OK);
}
Esempio n. 2
0
/* MAIN ROUTINE. */
void dnsdbd_init(void){
 unsigned int i=0;
 pthread_t pt_a,pt_s;
 struct in_addr show_ip;
 struct passwd *p;

 /* SET GLOBAL "~/.dnsdb-cache" PATH. */
 if(!(p=getpwuid(getuid()))&&(i=strlen(p->pw_dir))){
  if(!(cachefile=(char *)malloc(13+1)))
   print_msg(1,"malloc() failed.");
  memset(cachefile,0,(13+1));
  strcpy(cachefile,"/.dnsdb-cache");
 }
 else{
  if(!(cachefile=(char *)malloc(i+13+1)))
   print_msg(1,"malloc() failed.");
  memset(cachefile,0,(i+13+1));
  sprintf(cachefile,"%s/.dnsdb-cache",p->pw_dir);
 }

 /* BEGIN INITIALIZATION. */
 print_msg(0,"bringing up MySQL connection to \"%s\"...",SQL_SERVER);
 while(db_init()){
  print_msg(0,"MySQL connection \"%s\" failed... (wait)",SQL_SERVER);
  sleep(5);
 }
 print_msg(0,"creating (if not exists) 'db' table...",SQL_SERVER);
 db_printf(DNSDB_TABLE);
 if((show_ip.s_addr=ip_i=get_last_ip()))
  print_msg(0,"using cached IP from \"%s\"...",cachefile);
 else{
  print_msg(0,"no usable IP from \"%s\"...",cachefile);
  show_ip.s_addr=init_ip();
 }
 if(((ip_i>>24)&0xff)!=1)
  print_msg(1,"the starting ip must start with a 1... (xxx.xxx.xxx.1)");
 print_msg(0,"setting initial base IP to \"%s\"...",inet_ntoa(show_ip));
 print_msg(0,"deleting any non-DUP MySQL entries...");
 db_printf("DELETE FROM db WHERE rsp<%u",MIN_RESPONSE);
 print_msg(0,"deleting any MySQL entries in the starting /24...");
 db_printf("DELETE FROM db WHERE id>%u AND id<%u",r_32(ip_i),r_32(ip_i)+254);
 print_msg(0,"bringing dns_get_answers_t() thread up...");
 if(pthread_create(&pt_a,0,(void*(*)(void *))dns_get_answers_t,0))
  print_msg(1,"thread creation failed.");
 print_msg(0,"waiting for confirmation...");
 while(!gat&&!nexit)sleep(1);
 if(!nexit){
  print_msg(0,"bringing dns_scan_t() thread up...");
  if(pthread_create(&pt_s,0,(void*(*)(void *))dns_scan_t,0))
   print_msg(1,"thread creation failed.");

  /* GOOD TO KNOW, AS ITS COMPILED IN AND SHOWN NOWHERES ELSE. */
  print_msg(0,"sending %u(%.2fk/s) packets/requests per second...",
  PACKETS_PER_SEC,((float)((20+8+18+strlen(RESOLV_DOMAIN))*PACKETS_PER_SEC)
  /1024));
  print_msg(0,"idle, collecting replies... (hit ENTER for current ip)");
  while(!nexit){

   /* MIGHT AS WELL HAVE A WAY TO SHOW THE CURRENT IP LOCATION. */
   if(getchar()=='\n'){
    show_ip.s_addr=ip_i;
    print_msg(0,"current ip: %s",inet_ntoa(show_ip));
   }
  }
 }
 return;
}
Esempio n. 3
0
int main (int argc, char **argv) {
  evutil_socket_t delay_sock, multicast_sock;
  struct event *udp_client_event, *multicast_listener_event, *signal_event,
               *discover_event, *telnet, *telnet_ref;
  opterr = 0;

  int opt;
  while ((opt = getopt (argc, argv, "u:U:t:T:v:s")) != -1) {
    switch (opt) {
      case 'u':
        delay_port = atoi(optarg);
        if(!delay_port) {
          fprintf(stderr, "bledny port opoznien\n");
          return 1;
        }
        break;
      case 'U':
        ui_port = atoi(optarg);
        if(!ui_port) {
          fprintf(stderr, "bledny port telnetu\n");
          return 1;
        }
        break;
      case 't':
        delay_ref = atof(optarg);
        if(delay_ref == 0.0) {
          fprintf(stderr, "bledny czas pomiedzy mierzeniem opoznien\n");
          return 1;
        }
        break;
      case 'T':
        discovery_ref = atof(optarg);
        if(discovery_ref == 0.0) {
          fprintf(stderr, "bledny czas pomiedzy odkrywaniem komputerow\n");
          return 1;
        }
        break;
      case 'v':
        ui_ref = atof(optarg);
        if(ui_ref == 0.0) {
          fprintf(stderr, "bledny czas pomiedzy odkrywaniem odswierzaniem ui\n"
          );
          return 1;
        }
      case 's':
        ssh_tcp = 1;
        break;
      default:
        fprintf(stderr, "bledna opcja\n");
        return 1;
    }
  }

  init_data();
  init_ip();
  init_mdns(ssh_tcp);
  main_loop = event_base_new();
  delay_sock = get_delay_sock();
  multicast_sock = get_multi_sock();

  udp_client_event = event_new(main_loop, delay_sock, EV_READ|EV_PERSIST,
                               udp_delays_ans_cb, NULL);
  if(!udp_client_event) {
    fprintf(stderr, "nie udalo sie utworzyc eventu serwera udp\n");
    exit(-1);
  }

  if(event_add(udp_client_event, NULL) == -1) {
    fprintf(stderr, "nie udalo sie przylaczyc eventu serwera udp\n");
    exit(-1);
  }


  multicast_listener_event = event_new(main_loop, multicast_sock,
      EV_READ|EV_PERSIST, multicast_rcv_cb, NULL);
  if(!multicast_listener_event)  {
    fprintf(stderr, "nie udalo sie utworzyc eventu serwera multicast\n");
    exit(-1);
  }

  if(event_add(multicast_listener_event, NULL) == -1) {
    fprintf(stderr, "nie udalo sie przylaczyc eventu serwera multicast\n");
    exit(-1);
  }

  discover_event = event_new(main_loop, multicast_sock, EV_TIMEOUT|EV_PERSIST,
                    multicast_discover_cb, NULL);

  if(!discover_event || event_add(discover_event, &disc_tv) < 0) {
    fprintf(stderr, "odkrywnie nie uruchomilo sie\n");
    exit(-1);
  }

  signal_event = evsignal_new(main_loop, SIGINT, sigint_cb, (void *)main_loop);

	if (!signal_event || event_add(signal_event, NULL)<0) {
		fprintf(stderr, "Could not create/add a signal event!\n");
		return 1;
	}

  evutil_socket_t uisock = socket(PF_INET, SOCK_STREAM, 0);
  struct sockaddr_in uiadrr;
  uiadrr.sin_family = AF_INET;
  uiadrr.sin_addr.s_addr = htonl(INADDR_ANY);
  uiadrr.sin_port = htons(ui_port);

  if(uisock == -1 ||
     evutil_make_listen_socket_reuseable(uisock) ||
     evutil_make_socket_nonblocking(uisock)) {
   		return 1;
  }
  bind(uisock, (struct sockaddr*)&uiadrr, (socklen_t)sizeof(uiadrr));

  listen(uisock, 5);

  telnet = event_new(main_loop, uisock, EV_READ|EV_PERSIST, telnet_cb, NULL);
  event_add(telnet, NULL);




  telnet_ref = event_new(main_loop, uisock, EV_TIMEOUT|EV_PERSIST,
    telnet_refresh_cb, NULL);
  event_add(telnet_ref, &ui_tv);

  if(event_base_dispatch(main_loop) == -1) {
    fprintf(stderr, "nie udalo sie uruchomic glownej petli\n");
    exit(-1);
  }

  event_free(signal_event);
  event_free(multicast_listener_event);
  event_free(udp_client_event);
  event_base_free(main_loop);

  close(delay_sock);
  close(multicast_sock);

  return 0;
}