免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: GNM
打印 上一主题 下一主题

贴一个能进行IP跳转欺骗的模块给大家玩玩:) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-09-29 10:28 |只看该作者
楼上代码已收到,正在拜读,非常感谢.....
BTW:如果使用skb_copy()然道就不用自已手工进行检验和计算了吗??

论坛徽章:
0
12 [报告]
发表于 2007-09-29 15:23 |只看该作者
当然要  skb_copy()只是 重新申请了已个新的skb结构体然后吧原来的skb拷贝过去而已
原先的skb指针是不可以修改的。

论坛徽章:
0
13 [报告]
发表于 2007-09-29 16:18 |只看该作者
应该可以修改,我这个模块就是直接修改的skb吧,抓包能看到修改的相关项已改变,只是检验和没有算对,还有通过skb_copy复至从一份出来进行修改后,怎么通过NP_ACCPET继续走下去呢??

论坛徽章:
0
14 [报告]
发表于 2007-09-29 19:33 |只看该作者
帮你修改了一下代码,我测试了一下checksum可以通过了; 我的服务器出了点问题,剩下的十一以后再调试吧
#define _KERNEL_

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/config.h>
#include <linux/ip.h>
#include <linux/inet.h>
#include <linux/in.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>

#define ALERT(fmt,args...) printk("Test: " fmt,##args)

#define REALIP        "192.168.9.163"              /* port that appears on the wire */
#define FAKEIP        "192.168.9.6"              /* port that appears on the wire */


static struct nf_hook_ops nfho_in;
static struct nf_hook_ops nfho_out;

//static unsigned char *drop_ip ="\x2a\xd7\xf1\x1";


__u32 in_aton(const char *);

unsigned long int magic_ip;
char *ip;
//MODULE_PARM(ip, "s";



static unsigned int my_call_out(unsigned int hooknum,struct sk_buff **skb,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const struct net_device *in,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const struct net_device *out,int(*okfn)(struct sk_buff*))
{
&nbsp;&nbsp;&nbsp;&nbsp;struct sk_buff *sk = *skb;
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int tcphoff=sk->nh.iph->ihl*4;
&nbsp;&nbsp;&nbsp;&nbsp;struct iphdr *iph = (*skb)->nh.iph;
&nbsp;&nbsp;&nbsp;&nbsp;struct tcphdr *th = (struct tcphdr*)((void *)sk->nh.iph + tcphoff);
&nbsp;&nbsp;&nbsp;&nbsp;unsigned short size;

&nbsp;&nbsp;&nbsp;&nbsp;int csum = 0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( iph->daddr == in_aton(REALIP) && iph->protocol == IPPROTO_TCP ) {

printk("test IP packet with packet to %d.%d.%d.%d \n",NIPQUAD(iph->daddr));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->daddr = in_aton(FAKEIP);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->check = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);  

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sk->csum = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;th->check = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csum = skb_checksum( sk, tcphoff ,sk->len-tcphoff , 0 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sk->csum = csum;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;th->check = csum_tcpudp_magic(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->saddr,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->daddr,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sk->len-tcphoff,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->protocol,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csum
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sk->ip_summed = CHECKSUM_UNNECESSARY;
&nbsp;&nbsp;&nbsp;return NF_ACCEPT;
}

static unsigned int my_call_in(unsigned int hooknum,struct sk_buff **skb,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const struct net_device *in,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const struct net_device *out,int(*okfn)(struct sk_buff*))
{
&nbsp;&nbsp;&nbsp;&nbsp;struct sk_buff *sk = *skb;
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int tcphoff=sk->nh.iph->ihl*4;
&nbsp;&nbsp;&nbsp;&nbsp;struct iphdr *iph = (*skb)->nh.iph;
&nbsp;&nbsp;&nbsp;&nbsp;struct tcphdr *th = (struct tcphdr*)((void *)sk->nh.iph + tcphoff);
&nbsp;&nbsp;&nbsp;&nbsp;unsigned short size;

&nbsp;&nbsp;&nbsp;&nbsp;int csum = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (  iph->saddr == in_aton(REALIP)  && iph->protocol == IPPROTO_TCP  ) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk("test IP packet with packet from %d.%d.%d.%d \n",NIPQUAD(iph->saddr));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->saddr = in_aton(FAKEIP);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->check = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);  

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sk->csum = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;th->check = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csum = skb_checksum( sk, tcphoff ,sk->len-tcphoff , 0 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sk->csum = csum;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;th->check = csum_tcpudp_magic(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->saddr,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->daddr,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sk->len-tcphoff,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iph->protocol,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csum
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sk->ip_summed = CHECKSUM_UNNECESSARY;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NF_ACCEPT;
}


[ 本帖最后由 lsddx110 于 2007-9-29 19:41 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2007-09-29 19:42 |只看该作者
__u32 in_aton(const char *str) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long l;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int val;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i < 4; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l <<= 8;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (*str != '\0') {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (*str != '\0' && *str != '.') {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val *= 10;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val += *str - '0';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l |= val;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (*str != '\0')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return    (htonl(l));
}




static int __init init(void)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALERT("insmod ok!\n");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfho_in.hook     =my_call_in ;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfho_in.hooknum  = NF_IP_PRE_ROUTING; /* First for IPv4 */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfho_in.pf       = PF_INET;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfho_in.priority = NF_IP_PRI_FIRST;   /* Make our func first */

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfho_out.hook     =my_call_out ;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfho_out.hooknum  = NF_IP_POST_ROUTING; /* First for IPv4 */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfho_out.pf       = PF_INET;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfho_out.priority = NF_IP_PRI_FIRST;   /* Make our func first */

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nf_register_hook(&nfho_in);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// nf_register_hook(&nfho_out);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;

}

static void __exit fini(void)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALERT("rmsmod ok!\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nf_unregister_hook(&nfho_in);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//nf_unregister_hook(&nfho_out);

}


module_init(init);
module_exit(fini);

论坛徽章:
0
16 [报告]
发表于 2007-09-29 19:58 |只看该作者
楼上,为什么要将 // nf_register_hook(&nfho_out)注掉呢????这样一来出去的包就没有对源IP进行修改啊????还有你都改那些地方了,请标注,多谢

论坛徽章:
0
17 [报告]
发表于 2007-09-29 20:04 |只看该作者
那是我调试用的;

1.    你取得 tcp头有问题,我改了一下:
struct tcphdr *th = (struct tcphdr*)((void *)sk->nh.iph + tcphoff);

2. TCP 的checksum计算有问题,帮你改了一下

[ 本帖最后由 lsddx110 于 2007-9-29 20:14 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2007-09-29 20:40 |只看该作者
多谢楼上,确实检码和对了,但为什么第三次握手发起方发的是RST复位包??  我看前两次握手都正常啊,第二次返回的SYN+ACK包也都对???

20:30:26.382672 192.168.112.199.32807 > 192.168.112.180.60011: S [tcp sum ok] 1975005886:1975005886(0) win 5840 <mss 1460,sackOK,timestamp 467651128 0,nop,wscale 2> (DF) [tos 0x10]  (ttl 60, id 63622, len 60)
20:30:26.382693 192.168.112.180.60011 > 192.168.112.199.32807: S [tcp sum ok] 3878330093:3878330093(0) ack 1975005887 win 5792 <mss 1460,sackOK,timestamp 1210705662 467651128,nop,wscale 0> (DF) (ttl 64, id 0, len 60)
20:30:26.383922 192.168.112.199.32807 > 192.168.112.180.60011: R [tcp sum ok] 1975005887:1975005887(0) win 0 (DF) (ttl 60, id 0, len 40)

论坛徽章:
0
19 [报告]
发表于 2007-09-30 09:09 |只看该作者
刚又看了下你的代码  你计算校验和的时候
size = ntohs(iph->tot_len) - (iph->ihl * 4);

  th->check = csum_tcpudp_magic(
                iph->saddr,
                iph->daddr,
                size,
                iph->protocol,
                csum_partial(sk->h.raw, doff, sk->csum)
                );
        }

这里的size是要加上 tcp 伪报头的 。
tcp校验和是  sizeof(tcp伪报头)+ sizeof tcphdr + sizeof tcpdata。

[ 本帖最后由 tent8 于 2007-9-30 09:35 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2007-09-30 09:37 |只看该作者
对头是有问题
这样也行
thead = (struct tcphdr *)(skb2->data + skb2->nh.iph->ihl * 4);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP