- 论坛徽章:
- 0
|
本人是新手以下是本人部分代码,此部分代码可以从截获的数据包进行修改然后从无线网卡发送出去,有线的可以发出去,但无线的发不出去,不知道为什么,哪位大侠可以指点一二。
if(tcph->syn == 1 && tcph->ack == 0){
printk("syn\n");
dev = dev_get_by_name(&init_net,"ra0");
//change mac
for(i=0;i<6;i++){
tmp_mac[i] = ehdr->h_source[i];
}
for(i=0;i<6;i++){
ehdr->h_dest[i] = ehdr->h_source[i];
}
for(i=0;i<6;i++){
tmp_mac[i] = ehdr->h_dest[i];
}
//change ip
tmp_ip = iph->saddr;
iph->saddr = iph->daddr;
iph->daddr = tmp_ip;
//change port
tmp_port = tcph->source;
tcph->source = tcph->dest;
tcph->dest = tmp_port;
tcph->syn = 1;
tcph->ack = 1;
tcph->ack_seq = tcph->seq+1;
tcph->seq = htonl(payload_len) + tcph->seq;
datalen = skb->len - iph->ihl*4;
tcp_option(skb);
tcph->check = 0;
tcph->check = tcp_v4_check(datalen, iph->saddr, iph->daddr,csum_partial((char *)tcph, datalen, 0));
iph->id = 0;
iph->check = 0;
iph->check = ip_fast_csum(iph,iph->ihl);
skb_pull(skb,iph->ihl*4);
skb_reset_transport_header(skb);
skb->ip_summed = CHECKSUM_NONE;
skb->pkt_type = PACKET_OTHERHOST;
skb->dev = dev;
skb_push(skb,iph->ihl*4);
skb_push(skb, ETHALEN);
ret = dev_queue_xmit(skb);
if(ret < 0)
{
printk("dev_queue_xmit() error\n");
dev_put(dev);
goto drop;
}
return NF_STOLEN;
} |
|