[C/C++] Paketmanipulation

Hallo!

Ich habe mir gerade mal ein paar Syn-Flooder in C angeschaut und frage mich jetzt wo es zu dieser "Paketmanipulation" irgendwo ein paar Seiten oder Bücher gibt auf denen ich mich mal schlau lesen kann. Gibts sowas? Das ganze soll bitte für Linux sein.

Ich hoffe ihr könnt mir helfen.

Das hier ist der Code über den ich halt gerne mal was lernen würde:

Code:
   struct send_tcp
   {
      struct iphdr ip;
      struct tcphdr tcp;
   } send_tcp;
   struct pseudo_header
   {
      unsigned int source_address;
      unsigned int dest_address;
      unsigned char placeholder;
      unsigned char protocol;
      unsigned short tcp_length;
      struct tcphdr tcp;
   } pseudo_header;
   int tcp_socket;
   struct sockaddr_in sin;
   int sinlen;
            
   /* form ip packet */
   send_tcp.ip.ihl = 5;
   send_tcp.ip.version = 4;
   send_tcp.ip.tos = 0;
   send_tcp.ip.tot_len = htons(40);
   send_tcp.ip.id = ran_port;
   send_tcp.ip.frag_off = 0;
   send_tcp.ip.ttl = 255;
   send_tcp.ip.protocol = IPPROTO_TCP;
   send_tcp.ip.check = 0;
   send_tcp.ip.saddr = source_addr;
   send_tcp.ip.daddr = dest_addr;
   
   /* form tcp packet */
   send_tcp.tcp.source = ran_port;
   send_tcp.tcp.dest = htons(dest_port);
   send_tcp.tcp.seq = ran_port;   
   send_tcp.tcp.ack_seq = 0;
   send_tcp.tcp.res1 = 0;
   send_tcp.tcp.doff = 5;
   send_tcp.tcp.fin = 0;
   send_tcp.tcp.syn = 1;
   send_tcp.tcp.rst = 0;
   send_tcp.tcp.psh = 0;
   send_tcp.tcp.ack = 0;
   send_tcp.tcp.urg = 0;
   send_tcp.tcp.res2 = 0;
   send_tcp.tcp.window = htons(512);
   send_tcp.tcp.check = 0;
   send_tcp.tcp.urg_ptr = 0;
   
   /* setup the sin struct */
   sin.sin_family = AF_INET;
   sin.sin_port = send_tcp.tcp.source;
   sin.sin_addr.s_addr = send_tcp.ip.daddr;   
   
   /* (try to) open the socket */
   tcp_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
   if(tcp_socket < 0)
   {
      perror("socket");
      exit(1);
   }
   
      /* set fields that need to be changed */
      send_tcp.tcp.source++;
      send_tcp.ip.id++;
      send_tcp.tcp.seq++;
      send_tcp.tcp.check = 0;
      send_tcp.ip.check = 0;
      
      /* calculate the ip checksum */
      send_tcp.ip.check = in_cksum((unsigned short *)&send_tcp.ip, 20);

      /* set the pseudo header fields */
      pseudo_header.source_address = send_tcp.ip.saddr;
      pseudo_header.dest_address = send_tcp.ip.daddr;
      pseudo_header.placeholder = 0;
      pseudo_header.protocol = IPPROTO_TCP;
      pseudo_header.tcp_length = htons(20);
      bcopy((char *)&send_tcp.tcp, (char *)&pseudo_header.tcp, 20);
      send_tcp.tcp.check = in_cksum((unsigned short *)&pseudo_header, 32);
      sinlen = sizeof(sin);
      sendto(tcp_socket, &send_tcp, 40, 0, (struct sockaddr *)&sin, sinlen);
   close(tcp_socket);

Danke

Nimda05
 
man inet, man ip oder auf deutsch: Du willst dich mit Raw-IP/-Socket-Programmierung auseinandersetzen, wo du das IP/UDP/TCP-Paket komplett selbst aufbaust :)
Das einzige Buch, das ich kenne, wo dazu was drin ist, ist der Stevens "Programmieren von Unixnetzwerken", und das ist für Netzwerkprogrammierung sowieso der Standard, den man im Regal haben will ;)
Ansonsten Google gibt dazu u.a. folgendes aus: http://www-rnks.informatik.tu-cottb...ZuRawSockets/ZotteljedisTippsZuRawSockets.htm
Ich habe das jetzt nicht gelesen, aber die Sachen von Zotteljedi sind in aller Regel relativ hochwertig.

Nachtrag: Ich hab gerade mal auf Zottels Seite selbst nachgeschaut, da ist das ganze (vermutlich aktueller und fehlerfreier) in einem Ebook drin: http://zotteljedi.de/doc/socket-buch.pdf
 
Hallo!

Danke für deine Antwort. Habe mir das Buch gerade mal angeschaut:
http://www.amazon.de/Programmieren-von-UNIX-Netzwerken-Netzwerk-APIs-Sockets/dp/3446213341
ganz schön happig der schicken mit fast 80?...
Naja ich werde erstmal sehen wie weit ich mit den Online Quellen zurecht komme ansonsten bleibt mir wohl nix anderes übrig.
Lohnt es sich denn das Buch zu kaufen oder ist das so übertrieben hochgestochen geschrieben dass man jedes 2te wort im Duden nachlagen muss?
 
Man kanns gut lesen, allerdings brauchst du schon Vorwissen. Wenn du also von Rechnernetzen (also, so theoretische Kentnisse) und C noch keine Ahnung hast, wird das ein harter, harter Weg. Ich habs damals als Schnäppchen für 25? bei Ebay bekommen, dafür fallen da die Seiten schon raus.

Ich habe mal gehört, daß das Ding auch schon in diversen P2P-Netzwerken rumschwimmen soll (allerdings auf Englisch vermutlich), aber ein ehrlicher Bürger macht sowas nicht[tm] und überhaupt hab ich das nur mal im Vorbeigehen auf einem dieser subversiven CCC-Treffs gehört!!elf *scnr*

Die Onlinequellen sollten dir prinzipiell auch weiterhelfen, nur manchmal muss man sich das halt dann zusammensuchen und auch wissen, nach was man sucht :-) (btw: die Manpages die ich vorher nannte, gibts wirklich :-)
 
Zurück
Oben