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?
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;
}