der tcp_header in den send_buf reinfummeln?
-
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 Portscanner die nutzen einmal:
tcp_header->th_win
...und einmal...
tcp_header->window
...Woher weis der Compiler, was der Progger meint?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; }
-
Hallo,
zu 1.: der ist schon im Buffer, auf die gleiche Weise wurde auch die "Verbindung" von ip_header mit dem Buffer hergestellt
zu 2.: es gibt zwei "Arten" der Struktur, die sich im wesentlichen nur in der Namensgebung unterscheiden, welche genommen wird, wird über ein #define gesteuert, siehe z.B. hier:
http://en.wikipedia.org/wiki/Tcphdr
MfG,
Probe-Nutzer