• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

tcp_header zum buffer?

tomycat

Member
hallo,
der Code habe ich compiliert, er geht.

1.Ich fülle den ip_header, aber wie kommt er in den Buffer.

2.Frage:

Es gibt scanner die nutzen einmal:
tcp_header->th_win
...und einmal...
tcp_header->window
...Woher weis der Compiler, was der Progger meint?

Code:
int send_packet(int socket,
               struct sockaddr_in *target_addr,
               struct sockaddr_in *your_addr,
               unsigned char session_flags,unsigned long sequence)
{
    struct iphdr        *ip_header;
    struct tcphdr       *tcp_header;
    struct pseudohdr    *pseudo_header;
    char                send_buf[40];
    int                 send_length;
    int                 sent_length;

    memset(send_buf,0,40);
    ip_header     = (struct iphdr *)send_buf;
    tcp_header    = (struct tcphdr *)(send_buf+sizeof(struct iphdr));
    pseudo_header = (struct pseudohdr *)((char*)tcp_header-sizeof(struct pseudohdr));

    pseudo_header->saddr     = your_addr->sin_addr.s_addr;
    pseudo_header->daddr     = target_addr->sin_addr.s_addr;
    pseudo_header->protocol  = IPPROTO_TCP;   
    pseudo_header->tcplength = htons(sizeof(struct tcphdr));  
        
    tcp_header->th_sport = your_addr->sin_port;
    tcp_header->th_dport = target_addr->sin_port;
    tcp_header->th_off   = 5;
    tcp_header->th_flags = session_flags;
    tcp_header->th_seq   = htonl(sequence);
    tcp_header->th_ack   = htonl(0);
    tcp_header->th_win   = htons(512);
    tcp_header->th_sum   = in_cksum((u_short *)pseudo_header,sizeof(struct pseudohdr)+sizeof(struct tcphdr));

    memset(send_buf,0,sizeof(struct iphdr));

////////////////////////////////ip_header füllen /////////////////////////////////

    ip_header->saddr    = your_addr->sin_addr.s_addr;
    ip_header->daddr    = target_addr->sin_addr.s_addr;
    ip_header->version  = 4;
    ip_header->ihl      = 5;
    ip_header->ttl      = 255;
    ip_header->id       = rand()%0xffff;
    ip_header->protocol = IPPROTO_TCP; 
    ip_header->tot_len  = htons(sizeof(struct iphdr)+sizeof(struct tcphdr));
    ip_header->check    = in_cksum((u_short *)ip_header,sizeof(struct iphdr));
        
////////////////////////////ip_heade ist gefüllt /////////////////////////////////

    send_length=sizeof(struct iphdr)+sizeof(struct tcphdr);
    sent_length=sendto(socket,send_buf,send_length,0,
                       (struct sockaddr *)target_addr,sizeof(struct sockaddr));
    if (send_length != sent_length) return -1;
    else return 0;
}
 
Oben