Anzeige:
Ergebnis 1 bis 4 von 4

Thema: C -> char - Zeiger ? will nicht

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    05.02.2005
    Beiträge
    11

    Unhappy C -> char - Zeiger ? rawsocket ? will nicht

    Guten morgen,
    ich hab mal wieder ein Problem mit C und Zeigern.
    Ich möchte gerne die IP von einem Raw-Socket ausgeben oder besser, die IP soll in einen String rein.
    gcc gibt auch bei mir keine Fehler aus.
    Die Funktion inet_ntoa(); gibt einen "char *" zurück.

    Code:
    #include <stdio.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netinet/ip.h>
    #include <netinet/tcp.h>
    int main(int argc, char *argv[])
    {
    
       char *zwischenspeicher;
       char *srcip, *dstip;
       char buffer[1024];
       struct in_addr addr;
       int r, bytes;
       struct iphdr *ip;
    
       r = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
       if (r == -1)
       {
          perror("socket() failed");
          return 1;
       }
       bytes = recv(r, buffer, sizeof(buffer), 0);
       ip = (struct iphdr *) buffer;
       addr.s_addr = ip->saddr;
       srcip = inet_ntoa(addr);
       printf("IP-Address S \t%s\n", srcip);
    
    }
    Wenn ich das Programm ausführe bekomme ich die korrekte IP-Address von einem IP-Packet.
    Wenn ich jedoch noch 3 Zeilen hinzufüge und das printf() in der letzten Zeile verschiebe sieht das so aus :
    Code:
    #include <stdio.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netinet/ip.h>
    #include <netinet/tcp.h>
    int main(int argc, char *argv[])
    {
    
       char *zwischenspeicher;
       char *srcip, *dstip;
       char buffer[1024];
       struct in_addr addr;
       int r, bytes;
       struct iphdr *ip;
       r = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
       if (r == -1)
       {
          perror("socket() failed");
          return 1;
       }
       bytes = recv(r, buffer, sizeof(buffer), 0);
       ip = (struct iphdr *) buffer;
       addr.s_addr = ip->saddr;
       srcip = inet_ntoa(addr);
       addr.s_addr = ip->daddr;
       dstip = inet_ntoa(addr);
       printf("IP-Address S \t%s\n", srcip);
       printf("IP-Address D \t%s\n", dstip);
    }
    bekomme ich sowohl beim der SourceIP meine Lokale IP z.b 192.168.1.2 als auch bei der DestinationIP die gleiche.

    Was mache ich falsch ?
    Kann mir jemand helfen ?


    Gruß ac3x
    Geändert von ac3x (19-07-2005 um 11:40 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •