Fehler im Scanner



  • Hallo ich habe nen kleinen Portscanner geschrieben allerdings habe ich ein Problem und komme nicht weiter. Ich hoffe einer von euch weiß wo der Fehler liegt.

    #include <windows.h>
    #include <winsock.h>
    #include <stdio.h>
    
    void WSAInit(void)
     {
      WORD wVersionReg = MAKEWORD(1, 1);
      WSADATA wsa;
      if (int err = WSAStartup(wVersionReg, &wsa) != 0)
       {
        printf("mistake");
       }
     }
    
    int main(int argc, char *argv[])		
    {
    	struct sockaddr_in scan;			
    	struct servent *name;				
    	struct hostent *host;	//muss ich noch weiter arbeiten			
    	int s;
    	unsigned long start, end, w;
    	unsigned short p;
    
    		if (argc < 4)
    		{
    			fprintf(stderr,"usage: %s <start> <end>\n", argv[1]);		
    			return 1;
    		}
    
    		start = ntohl(inet_addr(argv[2]));					
    		end = ntohl(inet_addr(argv[3]));					
    		if (start > end)
    		{
    			w = end;
    			end = w;
    			w = start;
    		}
    		for (w = start; w <= end; w++)						
    		{
    			scan.sin_addr.s_addr = htonl(w);				
    			printf("%s:\n", inet_ntoa(scan.sin_addr));		
    
    			p;{21, 22, 23, 25, 43, 49, 53, 69, 70, 79, 80, 110, 111, 113, 115, 119, 123,			
    			   130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 143, 161, 162, 177, 389,
    			   443, 445, 512, 513, 514, 515, 631, 1080, 1812, 2049, 4500, 6667, 6772, 1433,
    			   1495, 1723, 1812, 1993, 1999, 2001, 2503, 2502, 5000, 7777, 8000, 8080, 10000,
    			   27015, 31337, 32780;}
    			for (;p++;)				
    			{
    				s = socket(PF_INET, SOCK_STREAM, 0);		
    				if (s == INVALID_SOCKET)						
    				{
    					perror("socket() failed");
    					return 2;
    				}
    				scan.sin_addr.s_addr = htonl(w);			
    				scan.sin_family = AF_INET;					
    				scan.sin_port = htons(p);					
    
    				printf("%i\r", p);							
    				fflush(stdout);								
    
    				if (!connect(s, (struct sockaddr*)&scan, sizeof(scan)))		
    				{
    					name = getservbyport(scan.sin_port, "tcp");				
    					if (name)
    						printf("%i (%s) open\n", p, name->s_name);
    					else
    						printf("%i (unknown) open\n", p);
    				}
    				closesocket(s);				
    			}
    			printf("----");
    		}
    		WSACleanup();
    		return 0;
    }
    


  • CyberFalk schrieb:

    allerdings habe ich ein Problem und komme nicht weiter.

    Geht es noch ein wenig ungenauer?

    Tipp: Eine gute Fehlerbeschreibung sieht anders aus.

    Compilerfehler? Linkerfehler? Laufzeitfehler? Schweißfüße?

    p;{21, 22, 23, 25, 43, 49, 53, 69, 70, 79, 80, 110, 111, 113, 115, 119, 123,			
    			   130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 143, 161, 162, 177, 389,
    			   443, 445, 512, 513, 514, 515, 631, 1080, 1812, 2049, 4500, 6667, 6772, 1433,
    			   1495, 1723, 1812, 1993, 1999, 2001, 2503, 2502, 5000, 7777, 8000, 8080, 10000,
    			   27015, 31337, 32780;}
    

    Was glaubst du, tut das?



  • Also Fehler bekomme ich nicht vom Compiler gemeldet.

    Was glaubst du, tut das?

    Naja, damit wollte ich eigentlich die zu scanenden Ports definieren.

    cu



  • Kleiner Tip: Vorher informieren, wie C funktioniert. Nicht irgendwas wildes aus den Fingern saugen und dann hier rumwundern dass es nicht tut.



  • Kritik ist ja ganz schön aber das mit dem

    Vorher informieren, wie C funktioniert

    ist doch ein bisschen viel, oder nicht?
    Foren sind doch dazu da um nach Hilfe zu fragen und Themen mit anderen auseinander zu nehmen.



  • Es soll nur ein hilfreicher Tipp sein. Das ist jetzt immerhin das zweite Posting von dir mit diesem Fehler, dass du irgendwelchen Code wild zusammenphantasierst. Es wird dir auf lange Sicht mehr helfen, wenn du deine Herangehensweise änderst und lieber erstmal kleine Schritte machst.



  • Ja gut du hast schon recht aber was sind kleine Schritte, kannst du mir da mal ein Beispiel nennen? (ich wäre dir dankbar)



  • Erstmal gucken, wie eine for-Schleife funktioniert und was der ++-Operator macht, z.B.



  • Gut danke schön. Wäre trotzdem toll falls mir jemand helfen würde.



  • MFK schrieb:

    p;{21, 22, 23, 25, 43, 49, 53, 69, 70, 79, 80, 110, 111, 113, 115, 119, 123,			
    			   130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 143, 161, 162, 177, 389,
    			   443, 445, 512, 513, 514, 515, 631, 1080, 1812, 2049, 4500, 6667, 6772, 1433,
    			   1495, 1723, 1812, 1993, 1999, 2001, 2503, 2502, 5000, 7777, 8000, 8080, 10000,
    			   27015, 31337, 32780;}
    

    Was glaubst du, tut das?

    das lässt sich sogar compilieren, unfassbar 😮



  • Tipp:

    if (start > end) 
            { 
                w = end; 
                end = w; 
                w = start; 
            }
    

    angucken und überlegen, was es machen soll und was es letztendlich macht.



  • unsigned short p;              //FALSCH
    int p[];                       //RICHTIG, sag nix dazu :), müsste man eigentlich wissen
    


  • p;{21, 22, 23, 25, 43, 49, 53, 69, 70, 79, 80, 110, 111, 113, 115, 119, 123,            
                   130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 143, 161, 162, 177, 389, 
                   443, 445, 512, 513, 514, 515, 631, 1080, 1812, 2049, 4500, 6667, 6772, 1433, 
                   1495, 1723, 1812, 1993, 1999, 2001, 2503, 2502, 5000, 7777, 8000, 8080, 10000, 
                   27015, 31337, 32780;}
    

    Nur mal einer von vielen Fehlern kurz erklärt:

    Du hast nur die Variable p hingeschrieben, und dann die Zeil beendet. Es passiert also rein garnix mit p, der Compiler wird diese Zeile rauslöschen in der exe.
    Danach hast du einfach ein paar Werte {...} reingeschrieben in das Programm. Mit denen passiert aber auch nix. Wird vom Compiler also auch weggelassen.

    Richtig: int p[]={...};

    Bsp. aus einem meiner Programme:

    int auswahl[2][2]={{-1,-1},{-1,-1}}
    

    Ich will dich nicht kritisieren, aber probier zuerst wirklich mal die Grundlagen durchzuackern. Dann passieren solche Fehler wie da oben auch nicht.
    Z.B:
    http://www.fh-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/cyris/

    Nach dem Tut. solltest du fit sein das Bsp. nochmal anzupacken, und dann gehts sicher besser.

    Grüße,
    Harri



  • Hallo,

    net schrieb:

    MFK schrieb:

    p;{21, 22, 23, 25, 43, 49, 53, 69, 70, 79, 80, 110, 111, 113, 115, 119, 123,			
    			   130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 143, 161, 162, 177, 389,
    			   443, 445, 512, 513, 514, 515, 631, 1080, 1812, 2049, 4500, 6667, 6772, 1433,
    			   1495, 1723, 1812, 1993, 1999, 2001, 2503, 2502, 5000, 7777, 8000, 8080, 10000,
    			   27015, 31337, 32780;}
    

    Was glaubst du, tut das?

    das lässt sich sogar compilieren, unfassbar 😮

    Das ist keine Magie, da steht eine Variable in der Gegend herum (p), dann folgt ein Block ({...}), im Block selbst sorgt der Komma-Operator für die Gültigkeit dieser Hintereinanderreihung von Literalen.

    Solltest du gemeint haben:

    "Unglaublich, wie man mit ein bischen Glück unabsichtlich und unbewußt gültigen Code schreiben kann"

    dann war die Aufklärung unnötig 😃

    MfG


Anmelden zum Antworten