openwrt 内核截断重定向自组报文发送

Brickie-liu 2014-04-09 05:49:19
下边是在post挂的钩子函数一个过程,要发如果是web服务回的是psh ack我直接修改为302 fin报文,但是客户端收不到报文?

u32 reply_http_302fin_out(struct sk_buff *skb)
{
struct iphdr *ipv4_hdr_t;
struct tcphdr *tcp_hdr_t;
struct ethhdr *eth_hdr_t;

char *data_hdr_t;

u32 eth_hdr_len = 0;
u32 ipv4_hdr_len = 0;
u32 tcp_hdr_len = 0;
u32 data_len = 0;
u32 pkt_len = 0;
u32 ret;
u8 packet[512]={0};
struct sk_buff *skb_t;
struct net_device *dev;
struct iphdr *iphdr;
struct tcphdr *tcphdr;
struct ethhdr *ethhdr;


ethhdr = eth_hdr(skb);
iphdr = ip_hdr(skb);
tcphdr = tcp_hdr(skb);

if(!ORIGIN_TCP_FLAG_PSH_ACK(tcphdr))
{
return 0;
}

eth_hdr_len = ethhdr->h_proto == htons(ETH_P_8021Q) ? ETH_HLEN + 4: ETH_HLEN;
ipv4_hdr_len = iphdr->ihl *4;
tcp_hdr_len = tcphdr->doff * 4;

data_hdr_t = packet + eth_hdr_len + ipv4_hdr_len + tcp_hdr_len;

data_len = reply_packet_buffer_data(data_hdr_t, g_portal_config.rehttp_conf.Location);
pkt_len = eth_hdr_len + ipv4_hdr_len + tcp_hdr_len + data_len;

skb_t = skb_copy_expand(skb,tcp_hdr_len+ipv4_hdr_len+eth_hdr_len, data_len, GFP_ATOMIC);
if( skb_t == NULL)
{
goto truncation_drop;
}

memcpy((void *)eth_hdr(skb_t), (void *)ethhdr, tcp_hdr_len+ipv4_hdr_len+eth_hdr_len);
memcpy((void *)eth_hdr(skb_t)+tcp_hdr_len+ipv4_hdr_len+eth_hdr_len, data_hdr_t, data_len);

ipv4_hdr_t = ip_hdr(skb_t);
tcp_hdr_t = tcp_hdr(skb_t);


ipv4_hdr_t->frag_off=ntohs(0x4000);
ipv4_hdr_t->check = 0;
ipv4_hdr_t->saddr = 0x01010101;

tcp_hdr_t->ack_seq = htonl(ntohl(tcphdr->seq)+ data_len);
tcp_hdr_t->psh = 1;
tcp_hdr_t->fin= 1;

ipv4_hdr_t->tot_len = htons( ipv4_hdr_t->ihl * 4 + tcp_hdr_t->doff * 4 + data_len);

ip_tcp_csum(ipv4_hdr_t, tcp_hdr_t, data_len);

/*打印自组报文内容,这个没什么问题*/
hexlog((void *)eth_hdr(skb_t), pkt_len);

ret = dev_queue_xmit(skb_t);
if(ret)
{
kfree_skb(skb_t);
}

return 1;
}


...全文
205 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Brickie-liu 2014-04-12
  • 打赏
  • 举报
回复
http://blog.csdn.net/liuzhuchen/article/details/23456027

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧