Speicherzugriffsfehler

vaporizer

Erfahrenes Mitglied
Hallo
also ich bin grade dabei C zu erlernen
und hab versucht einen einfachen Portscanner zu programmieren (Tutorial)
compiliert hab ich es mit gcc was auch wunderbar funktionierte
nur wenn ich das Programm ausführen möchte kommt folgende Meldung:
"Speicherzugriffsfehler"
kann mir jemand sagen warum?
 
-

Ich glaube, hier kann keiner hellsehen, von daher wäre es äußerst hilfreich, wenn du deinen Quellcode mal posten würdest.
 
hier ist der Code:
das idle stand für das Delay hab ich aber rausgelöscht
da es Probleme mit SDL.h gab
müßte aber auch ohne Delay gehn schätz ich mal oder?
Code:
#include <sys/socket.h>
#include <signal.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>


int scann_normal(char *ip, int port);  
int main(int argc, char *argv[])
{
  char *ip;
  unsigned int startport = 0;
  unsigned int endport = 0;
  unsigned int idle = 0;
  int i = 0;
  char *tmp;
  int tmp2 = 0;

  if (argc < 5)
  {
    printf ("Error : Incorrect usage.\n");
    printf ("Usage : littlescanner -IP -startport -endport -idle [in ms].\n");
    return 0;
  }
  if (strlen(argv[1]) > 15)
  {
    printf ("Error : The IP-Parameter is not a valid IP-adress\n");
    return 0;
  }
  else
  {
    strcpy(ip,argv[1]);
  };

  tmp = argv[2];
  tmp2 = atol (tmp);
  if (tmp2 < 65535 && tmp2 > 0)
  {
    startport = tmp2;
  }
  else
  {
    printf ("Startport is not a valid Number.\n");
    return 0;
  }
  tmp = argv[3];
  tmp2 = atol (tmp);
  if (tmp2 < 65535 && tmp2 > 0 && tmp2 > startport)
  {
    endport = tmp2;
  }
  else
  {
    printf ("Endport is not a valid Number. \n");
    return 0;
  }
  idle = atol (argv[4]);

  for (i = startport; i <= endport; i++)
  {
    scann_normal(ip,i);
  }
}

int scann_normal(char *ip, int port)
{
  int sockfd;  						
  struct sockaddr_in servaddr;				

  servaddr.sin_family = AF_INET;			
  AF_INET
  servaddr.sin_port = htons(port);		
  servaddr.sin_addr.s_addr = inet_addr(ip);	
  sockfd = socket(AF_INET, SOCK_STREAM, 0);	

  if (connect(sockfd,(struct sockaddr *) &servaddr, sizeof(servaddr)) != -1)	
    printf ("Port %i is open\n",port);

  close (sockfd);					
}
also wie gesagt
wenn ich das pogramm ausführe bekomm ich als Antwort:
Speicherzugriffsfehler
 
Zuletzt bearbeitet von einem Moderator:
Fehler gefunden :-)

Also zunächst mal:
BITTE BITTE CODE-TAGS BENUTZEN
Dein Fehler ist hier:
Code:
int main(int argc, char *argv[])
{
   char *ip;  // das ist ein Zeiger der niergendwohin zeigt
   unsigned int startport = 0;
   unsigned int endport = 0;
   unsigned int idle = 0;
   int i = 0;
   char *tmp; // das ist ein Zeiger der niergendwohin zeigt

...
...
strcpy(ip,argv[1]); // hier gibts einen Absturz, da ip, nicht auf einen Allokierten Speicherbereich zeigt.

Gruß Homer
 
Zurück