start IP - stop IP



  • hi leute

    ich möchte eine IP einlesen und weiterzählen lassen bis zu einer maximal ip.
    und es soll die ip in einer zeile eingelesen werden können

    z.B.:
    gets(x); -> 112.121.102.11
    gets(y); -> 222.122.221.12
    und nun soll das prog von x bis y alle IP`s abklappern

    wie geht das?



  • einfach mit sscanf in einzelne zahlen zerlegen und dann über eine schleife laufen lassen

    char szBuffer[16];
    int a, b, c, d;
    
    gets(szBuffer);
    if (sscanf(szBuffer,"%d.%d.%d.%d",&a,&b,&c,&d) == 4)
    	//...
    


  • In die einzelnen Bestandteile zerlegen und dann in Schleifen durchgehen



  • danke es funz



  • T4skFoRcE³ schrieb:

    gets(x); -> 112.121.102.11
    gets(y); -> 222.122.221.12
    und nun soll das prog von x bis y alle IP`s abklappern

    subnetmaske fehlt.



  • char szBuffer[16];
    char szBuffer2[16];
    char IP[16] ;
    int a, b, c, d, a2, b2, c2, d2; 
    printf("startIP:\n");
    gets(szBuffer); 
    printf("stopIP:\n");
    gets(szBuffer2);
    if (sscanf(szBuffer2,"%d.%d.%d.%d",&a2,&b2,&c2,&d2) == 4) 
    {
    if (sscanf(szBuffer,"%d.%d.%d.%d",&a,&b,&c,&d) == 4) 
    {
    if(a>=255){a=255;}//eingabe fehler korrektur
    if(b>=255){b=255;}
    if(c>=255){c=255;}
    if(d>=255){d=255;}
    if(a>=a2){printf("Inkorekter Endwert\n");}
    if(b>=b2){printf("Inkorekter Endwert\n");}
    if(c>=c2){printf("Inkorekter Endwert\n");}
    if(d>=d2){printf("Inkorekter Endwert\n");}
    
    if(szBuffer<=szBuffer2){printf("Inkorekter Endwert\n");}
    	while(a<=a2)
    	{
    	if(a>=255){break;}
    	a++;
    	while(b<=b2)
    	{
    	if(b>=255){break;}
    	b++;
    	while(c<=c2)
    	{
    	if(c>=255){break;}
    	c++;
    	while(d<=d2)
    	{
    	if(d>=255){break;}
    	d++;
    	sprintf(IP,"%i.%i.%i.%i",a,b,c,d);
    	cout<<IP<<endl;
    	}
    	b=0;
    	break;
    	}
    	c=0;
    	break;
    	}
    	b=0;
    	break;
    	}
    }
    }
    

    und wie krieg ich die schleifen dazu bei der endIP zu stoppen?



  • innendrin
    if(ende erreicht) goto hinter die schleifen;



  • juhu THX @ all
    heureka ICH HABS

    //initialisierung
    char szBuffer[16];
    char szBuffer2[16];
    char IP[16] ;
    int a, b, c, d, a2, b2, c2, d2; 
    //initialisierung ende
    
    //werteingabe
    printf("startIP:\n");
    gets(szBuffer); 
    
    printf("stopIP:\n");
    gets(szBuffer2);
    printf("\n");
    //werteingabe ende
    
    if (sscanf(szBuffer2,"%d.%d.%d.%d",&a2,&b2,&c2,&d2) == 4) 
    {
    if (sscanf(szBuffer,"%d.%d.%d.%d",&a,&b,&c,&d) == 4) 
    {
    //eingabe fehler korektur	
    
    if(a>=255){a=255;}
    if(b>=255){b=255;}
    if(c>=255){c=255;}
    if(d>=255){d=255;}
    if(a>a2 && b>b2 && c>c2 && d>d2){printf("Inkorekter Endwert\n");}
    //eingabe fehler korektur ende 	
    
    //IP-Ranger
    
    while(true)
    {
    sprintf(IP,"%i.%i.%i.%i",a,b,c,d);
    cout<<IP<<endl;
    d++;
    
    if(d==255){d=0;c++;}
    if(c==255){c=0;b++;}
    if(b==255){b=0;a++;}
    if(a==255){break;}
    if(a==a2 && b==b2 && c==c2 && d==d2){break;}
    }
    //IP-Ranger ende			
    
    }
    else {printf("Inkorekter Endwert\n");}
    }
    else {printf("Inkorekter Endwert\n");}
    


  • ekelhaft... 😮 😮



  • dann können wir ja langsam zu gutem code kommen.

    wandle firstip in nen u32 um.
    wandle lastip in nen u32 um.

    dann gehts in etwa so:

    for(u32 ip=firstip;ip<=lastip;++ip)
       tuwas(ip);
    

    genial einfach, gell?


Anmelden zum Antworten