int cmd_ifconfig( int argc, char ** argv ) { unsigned char IP[16]; printf_P( PSTR( "IP: %s\r\n") , iptostr ( myIP, IP ) ); printf_P( PSTR( "Netmask: %s\r\n") , iptostr ( Netmask, IP ) ); printf_P( PSTR( "Gateway: %s\r\n") , iptostr ( Gateway, IP ) ); #ifdef DNS printf_P( PSTR( "DNS: %s\r\n") , iptostr ( DNSserver, IP ) ); #endif printf_P( PSTR( "\r\nHW-Adr: %02x:%02x:%02x:%02x:%02x:%02x\r\n\r\n"),mymac[0],mymac[1],mymac[2],mymac[3],mymac[4],mymac[5]); }
/* * DNS event related code */ static void dns_event_success(struct resolve *rp, int type) { if (!rp) return; if (type == T_PTR) { debug2("DNS resolved %s to %s", iptostr(rp->ip), rp->hostn); call_hostbyip(ntohl(rp->ip), rp->hostn, 1); } else if (type == T_A) { debug2("DNS resolved %s to %s", rp->hostn, iptostr(rp->ip)); call_ipbyhost(rp->hostn, ntohl(rp->ip), 1); } }
void eof_dcc_dnswait(int idx) { putlog(LOG_MISC, "*", "Lost connection while resolving hostname [%s/%d]", iptostr(&dcc[idx].sockname.addr.sa), dcc[idx].port); killsock(dcc[idx].sock); lostdcc(idx); }
static void dns_event_failure(struct resolve *rp, int type) { if (!rp) return; if (type == T_PTR) { static char s[UHOSTLEN]; debug1("DNS resolve failed for %s", iptostr(rp->ip)); strcpy(s, iptostr(rp->ip)); call_hostbyip(ntohl(rp->ip), s, 0); } else if (type == T_A) { debug1("DNS resolve failed for %s", rp->hostn); call_ipbyhost(rp->hostn, 0, 0); } else debug2("DNS resolve failed for unknown %s / %s", iptostr(rp->ip), nonull(rp->hostn)); return; }
void block_dns_hostbyip(IP ip) { struct hostent *hp; unsigned long addr = my_htonl(ip); static char s[UHOSTLEN]; Context; if (!setjmp(alarmret)) { alarm(resolve_timeout); hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET); alarm(0); if (hp) { strncpy(s, hp->h_name, UHOSTLEN - 1); s[UHOSTLEN - 1] = 0; } else strcpy(s, iptostr(addr)); } else { hp = NULL; strcpy(s, iptostr(addr)); } /* Call hooks. */ call_hostbyip(ip, s, hp ? 1 : 0); Context; }
static void dns_tcl_iporhostres(IP ip, char *hostn, int ok, void *other) { devent_tclinfo_t *tclinfo = (devent_tclinfo_t *) other; Context; if (Tcl_VarEval(interp, tclinfo->proc, " ", iptostr(my_htonl(ip)), " ", hostn, ok ? " 1" : " 0", tclinfo->paras, NULL) == TCL_ERROR) putlog(LOG_MISC, "*", DCC_TCLERROR, tclinfo->proc, interp->result); /* Free the memory. It will be unused after this event call. */ nfree(tclinfo->proc); if (tclinfo->paras) nfree(tclinfo->paras); nfree(tclinfo); }
/* Show list of current dcc's to a dcc-chatter * positive value: idx given -- negative value: sock given */ void tell_dcc(int zidx) { int i, j, nicklen = 0; char other[160]; char format[81]; /* calculate max nicklen */ for (i = 0; i < dcc_total; i++) { if (strlen(dcc[i].nick) > nicklen) nicklen = strlen(dcc[i].nick); } if (nicklen < 9) nicklen = 9; j = 60 - nicklen; if (j < 15) j = 15; if (j > 40) j = 40; egg_snprintf(format, sizeof format, "%%-3s %%-%u.%us %%-6s %%-%u.%us %%s\n", j, j, nicklen, nicklen); dprintf(zidx, format, "IDX", "ADDR", "+ PORT", "NICK", "TYPE INFO"); dprintf(zidx, format, "---", "------------------------------------------------------", "------", "--------------------------------", "----- ---------"); egg_snprintf(format, sizeof format, "%%-3d %%-%u.%us %%c%%5d %%-%u.%us %%s\n", j, j, nicklen, nicklen); /* Show server */ for (i = 0; i < dcc_total; i++) { if (dcc[i].type && dcc[i].type->display) dcc[i].type->display(i, other); else { sprintf(other, "?:%lX !! ERROR !!", (long) dcc[i].type); break; } dprintf(zidx, format, dcc[i].sock, iptostr(&dcc[i].sockname.addr.sa), #ifdef TLS dcc[i].ssl ? '+' : ' ', dcc[i].port, dcc[i].nick, other); #else ' ', dcc[i].port, dcc[i].nick, other); #endif } }
static void server_resolve_success(int servidx) { int oldserv = dcc[servidx].u.dns->ibuf; char s[121], pass[121]; resolvserv = 0; dcc[servidx].addr = dcc[servidx].u.dns->ip; strcpy(pass, dcc[servidx].u.dns->cbuf); changeover_dcc(servidx, &SERVER_SOCKET, 0); serv = open_telnet(iptostr(htonl(dcc[servidx].addr)), dcc[servidx].port); if (serv < 0) { neterror(s); putlog(LOG_SERV, "*", "%s %s (%s)", IRC_FAILEDCONNECT, dcc[servidx].host, s); lostdcc(servidx); if (oldserv == curserv && !never_give_up) fatal("NO SERVERS WILL ACCEPT MY CONNECTION.", 0); } else { dcc[servidx].sock = serv; /* Queue standard login */ dcc[servidx].timeval = now; SERVER_SOCKET.timeout_val = &server_timeout; /* Another server may have truncated it, so use the original */ strcpy(botname, origbotname); /* Start alternate nicks from the beginning */ altnick_char = 0; if (pass[0]) dprintf(DP_MODE, "PASS %s\n", pass); dprintf(DP_MODE, "NICK %s\n", botname); rmspace(botrealname); if (botrealname[0] == 0) strcpy(botrealname, "/msg LamestBot hello"); dprintf(DP_MODE, "USER %s . . :%s\n", botuser, botrealname); /* Wait for async result now. */ } }
static void dns_tcl_iporhostres(sockname_t *ip, char *hostn, int ok, void *other) { devent_tclinfo_t *tclinfo = (devent_tclinfo_t *) other; Tcl_DString list; Tcl_DStringInit(&list); Tcl_DStringAppendElement(&list, tclinfo->proc); Tcl_DStringAppendElement(&list, iptostr(&ip->addr.sa)); Tcl_DStringAppendElement(&list, hostn); Tcl_DStringAppendElement(&list, ok ? "1" : "0"); if (tclinfo->paras) { EGG_CONST char *argv[2]; char *output; argv[0] = Tcl_DStringValue(&list); argv[1] = tclinfo->paras; output = Tcl_Concat(2, argv); if (Tcl_Eval(interp, output) == TCL_ERROR) { putlog(LOG_MISC, "*", DCC_TCLERROR, tclinfo->proc, tcl_resultstring()); Tcl_BackgroundError(interp); } Tcl_Free(output); } else if (Tcl_Eval(interp, Tcl_DStringValue(&list)) == TCL_ERROR) { putlog(LOG_MISC, "*", DCC_TCLERROR, tclinfo->proc, tcl_resultstring()); Tcl_BackgroundError(interp); } Tcl_DStringFree(&list); nfree(tclinfo->proc); if (tclinfo->paras) nfree(tclinfo->paras); nfree(tclinfo); }
/*------------------------------------------------------------------------------------------------------------*/ unsigned int NTP_GetTime( unsigned long IP, char * dnsbuffer, char timedif ) { char buffer[ NTP_SIZE ]; int i=0, socket, timer, retval = NTP_ERROR; #if defined(NTP_DEBUG) char String[30]; #endif union DATE ZeitInSek; struct TIME time; #if defined(NTP_DEBUG) printf_P( PSTR("Oeffne neues Socket.\r\n") ); #endif if ( IP == 0 ) { #ifdef UDP #ifdef DNS if ( dnsbuffer != 0 ) { // Host nach IP auflösen IP = DNS_ResolveName( dnsbuffer ); // könnte er aufgelöst werden ? if ( IP == DNS_NO_ANSWER ) return( NTP_ERROR ); } else #endif #endif return( NTP_ERROR ); } // UDP-socket aufmachen für Bootp socket = UDP_RegisterSocket( IP , 37 , NTP_SIZE , buffer); // Wenn Fehler aufgetretten, return if ( socket == UDP_SOCKET_ERROR ) { return ( NTP_ERROR ); } #if defined(NTP_DEBUG) printf_P( PSTR("UDP-Socket aufgemacht zur %s.\r\n"), iptostr( IP, String ) ); #endif // leeres UDP-Packet an Time-server senden UDP_SendPacket( socket, 0 , buffer); #if defined(NTP_DEBUG) printf_P( PSTR("UDP-Packet gesendet.\r\n")); #endif // Timeout-counter reservieren und starten timer = CLOCK_RegisterCountdowntimer(); if ( timer == CLOCK_FAILED ) return ( NTP_ERROR ); CLOCK_SetCountdownTimer( timer , 500, MSECOUND ); #if defined(NTP_DEBUG) printf_P( PSTR("Warte auf Antwort.")); #endif // Auf Antwort des Timer-Servers warten while( 1 ) { // Wenn Time-Server geantwortet hat inerhalb des Timeouts, hier weiter if ( UDP_GetSocketState( socket ) == UDP_SOCKET_BUSY && ( CLOCK_GetCountdownTimer( timer ) != 0 ) ) { // Sind 4 Bytes empfangen worden, wenn ja okay, sonst fehler if ( UDP_GetByteInBuffer( socket ) >= 4 ) { // Daten kopieren und Zeit ausrechnen for ( i = 0 ; i < 4 ; i++ ) ZeitInSek.DateByte[ i ] = buffer[ 3 - i ]; CLOCK_GetTime( &time ); time.time = ZeitInSek.Date; time.timezone = timedif; CLOCK_decode_time( &time ); CLOCK_SetTime( &time ); retval = NTP_OK; #if defined(NTP_DEBUG) printf_P( PSTR("Antwort erhalten.\r\n")); #endif // fertisch break; } else { #if defined(NTP_DEBUG) printf_P( PSTR("Falsches Format der Antwort.\r\n")); #endif retval = NTP_ERROR; break; } } // Timeout erreicht ? Wenn ja Fehler. if ( CLOCK_GetCountdownTimer( timer ) == 0 ) { #if defined(NTP_DEBUG) printf_P( PSTR("Timeout beun warten auf Antwort.\r\n")); #endif retval = NTP_ERROR; break; } } // timer freigeben und UDP-Socket schliessen CLOCK_ReleaseCountdownTimer( timer ); UDP_CloseSocket( socket ); #if defined(NTP_DEBUG) printf_P( PSTR("UDP-Socket geschlossen.\r\n")); #endif return( retval ); }
/*------------------------------------------------------------------------------------------------------------*/ void cgi_network( void * pStruct ) { struct HTTP_REQUEST * http_request; http_request = (struct HTTP_REQUEST *) pStruct; unsigned char IP[32]; /* printf_P( PSTR( "<HTML>\r\n" "<HEAD>\r\n" "<TITLE>network</TITLE>\r\n" "</HEAD>\r\n" " <BODY>\r\n")); */ cgi_PrintHttpheaderStart(); if ( http_request->argc == 0 ) { printf_P( PSTR( "<pre>\r\n") ); #ifdef TELNETSERVER TELNET_runcmdextern_P( PSTR("ifconfig") ); TELNET_runcmdextern_P( PSTR("stats") ); #endif printf_P( PSTR( "</pre>\r\n") ); } else if( PharseCheckName_P( http_request, PSTR("config") ) ) { printf_P( PSTR( "<form action=\"network.cgi\">\r" " <table border=\"0\" cellpadding=\"5\" cellspacing=\"0\">" )); #ifdef DHCP readConfig_P( PSTR("DHCP"), IP ); printf_P( PSTR( " <tr>\r" " <td align=\"right\">DHCP aktivieren</td>" " <td><input type=\"checkbox\" name=\"DHCP\" value=\"on\" " )); if ( !strcmp_P( IP, PSTR("on") ) ) printf_P( PSTR("checked")); printf_P( PSTR( "></td>\r" " </tr>\r") ); #endif if ( readConfig_P ( PSTR("IP"), IP ) != 1 ) iptostr ( myIP, IP ); printf_P( PSTR( " <tr>\r" " <td align=\"right\">IP-Adresse</td>" " <td><input name=\"IP\" type=\"text\" size=\"15\" value=\"%s\" maxlength=\"15\"></td>" " </tr>\r") , IP ); if ( readConfig_P ( PSTR("MASK"), IP ) != 1 ) iptostr ( Netmask, IP ); printf_P( PSTR( " <tr>\r" " <td align=\"right\">Netzwerkmaske</td>" " <td><input name=\"MASK\" type=\"text\" size=\"15\" value=\"%s\" maxlength=\"15\"></td>" " </tr>\r") , IP ); if ( readConfig_P ( PSTR("GATE"), IP ) != 1 ) iptostr ( Gateway, IP ); printf_P( PSTR( " <tr>\r" " <td align=\"right\">Gateway</td>" " <td><input name=\"GATE\" type=\"text\" size=\"15\" value=\"%s\" maxlength=\"15\"></td>" " </tr>\r") , IP ); #ifdef DNS if ( readConfig_P ( PSTR("DNS"), IP ) != 1 ) iptostr ( DNSserver, IP ); printf_P( PSTR( " <tr>\r" " <td align=\"right\">DNS-Server</td>" " <td><input name=\"DNS\" type=\"text\" size=\"15\" value=\"%s\" maxlength=\"15\"></td>" " </tr>\r" ), IP ); #endif readConfig_P( PSTR("ETH_FLDX"), IP ); printf_P( PSTR( " <tr>\r" " <td align=\"right\">Fullduplex aktivieren</td>" " <td><input type=\"checkbox\" name=\"ETH_FLDX\" value=\"on\" " )); if ( !strcmp_P( IP, PSTR("on") ) ) printf_P( PSTR("checked")); printf_P( PSTR( "></td>\r" " </tr>\r") ); if ( readConfig_P ( PSTR("MAC"), IP ) != 1 ) mactostr( mymac, IP ); printf_P( PSTR( " <tr>\r" " <td align=\"right\">Hardware-MAC</td>" " <td><input name=\"MAC\" type=\"text\" size=\"17\" value=\"%s\" maxlength=\"17\"></td>" " </tr>\r" " <tr>\r" " <td></td><td><input type=\"submit\" value=\" Einstellung Übernehmen \"></td>" " </tr>\r" " </table>\r" "</form>") , IP ); } else { #ifdef DHCP if ( PharseCheckName_P( http_request, PSTR("DHCP") ) ) changeConfig_P( PSTR("DHCP"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("DHCP") ) ] ); else changeConfig_P( PSTR("DHCP"), "off" ); #endif if ( PharseCheckName_P( http_request, PSTR("IP") ) ) changeConfig_P( PSTR("IP"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("IP") ) ] ); if ( PharseCheckName_P( http_request, PSTR("MASK") ) ) changeConfig_P( PSTR("MASK"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("MASK") ) ] ); if ( PharseCheckName_P( http_request, PSTR("GATE") ) ) changeConfig_P( PSTR("GATE"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("GATE") ) ] ); #ifdef DNS if ( PharseCheckName_P( http_request, PSTR("DNS") ) ) changeConfig_P( PSTR("DNS"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("DNS") ) ] ); #endif if ( PharseCheckName_P( http_request, PSTR("MAC") ) ) changeConfig_P( PSTR("MAC"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("MAC") ) ] ); if ( PharseCheckName_P( http_request, PSTR("ETH_FLDX") ) ) changeConfig_P( PSTR("ETH_FLDX"), http_request->argvalue[ PharseGetValue_P ( http_request, PSTR("ETH_FLDX") ) ] ); else changeConfig_P( PSTR("ETH_FLDX"), "off" ); printf_P( PSTR("Einstellungen uebernommen!\r\n")); } cgi_PrintHttpheaderEnd(); /* printf_P( PSTR( " </BODY>\r\n" "</HTML>\r\n" "\r\n"), IP); */ }