本人从事酒店网管6年有余,日常工作中发现常有客房上网须电脑维护人员帮忙设置,
因为很多客人怎样设置自动获取IP也不会,于是考虑能否实现客房上网无须任何设置,
真正即插即用,然后google了一下,相关产品早就有了,如:
http://www.kcomst.com/general/download.htm
等等。但是,我是个编程爱好者,在参考了很多协议资料后,尝试自己写。
目前工程已经实现的功能:
1、捕获网内所有生存主机;
2、可以根据需要重定向客人的URL;
3、监控所有数据包;
。。
。。
有兴趣的朋友可以一起讨论
QQ:81623859(隐身)
E-mail:[email protected]
因为很多客人怎样设置自动获取IP也不会,于是考虑能否实现客房上网无须任何设置,
真正即插即用,然后google了一下,相关产品早就有了,如:
http://www.kcomst.com/general/download.htm
等等。但是,我是个编程爱好者,在参考了很多协议资料后,尝试自己写。
目前工程已经实现的功能:
1、捕获网内所有生存主机;
2、可以根据需要重定向客人的URL;
3、监控所有数据包;
。。
。。
有兴趣的朋友可以一起讨论
QQ:81623859(隐身)
E-mail:[email protected]
解决方案 »
- ATL实现类似QQ表情的快捷方式的方法
- 在ActiveX生成一个Toolbar
- 郁闷!我用到别人提供的DLL,结果调用时总出现:Windows 已在 EMUClient.exe 中触发一个断点。其原因可能是堆被损坏,这也说明 EMUClient.exe 中或它所加载的任何 DLL 中有 bug。
- Cstring 转 char*
- vc小菜鸟,弱弱的问~~~~
- 能否将本程序的权限提升到"关键系统进程"
- 菜鸟问个问题,请教各位大侠(刚才问得不好,实在抱歉)
- 一个简单的问题!
- 请教ado牛人,这是什么错误??????????
- 如何在MFC下用OpenGL的方法来创建球体,急!!!
- 关于CRITICAL_SECTION、CCriticalSection和信号量的问题
- 关于线程同步的一个简单问题
配合winPcap函数库,能抓取所有网络原始包,网络上有关ARP欺骗,
DNS重定向的资料也很多。
本人新增了NetBIOS欺骗,参考RFC1001及RFC1002文档,
当客户端既无网关,也无DNS时,在IE输入任意字符,会在本地子网广播一个
NBNS查询包,系统抓取此包后,伪造一个NBNS响应包返回,在客户端的名称解析
缓存中会产生一条记录(nbtstat /c 查看)。
在本人的模拟测试环境中,假设最坏状况:
1、客户端IP与子网与本机(服务器)不在同一子网;
2、无DNS;
3、无网关;当客户端在IE输入任意URl或字符(如:www.abc.com),首先在本地缓存中查找解析名称对应IP的记录,之后查找本地的解析文件,之后向本地子网广播NBNS查询包,经服务端抓取此包后,返回伪响应包,此时客户端缓存中对应 www.abc.com 的IP 为 192.168.1.1(服务器端LAN IP),即完成了NetBT
重定向。问题是:
此时,客户端与服务端的TCP连接仍不能成功建立,分析客户端当前路由(route print),没有
到达 192.168.1.1 的路由,于是,又写了个ICMP路由重定向函数,期望能在客户端路由表新增期望路由,可惜不成功,(也尝试了ICMP路由通告,不成功)。通过数据包分析工具Ethereal,抓取了一条名为:slow proctol 协议,源MAC与目标MAC既不是客户端MAC也不是服务端MAC,可能是交换机的端口MAC,在网上google后,有关slow proctol的资料几近于无
你给的那个url地址的那家公司,没有实现这个功能
他们有client端。
是否可以考虑RIP欺骗,准备尝试一下。另:不知您当时的思路是否相同?
难道我的重定向包构造有误?---------------
您所说的“模拟一个req给它”,是指什么协议请求包?
void myPcap::sendICMP_Directional(u_char * data) //data 是所捕获的原始数据包
{
ETH_HEADER ethR ,ethS; //以太网首部
IP_HEADER ipR ,ipS; //IP数据报首部
ICMP_HEADER icmpS; //ICMP首部
unsigned long routeIP; //应使用的路由IP
unsigned char ipHadd8[28]; //IP首部+原始IP数据报中前8个字节
char sendBuf[1024],temp[1024]; ethR=*(ETH_HEADER *)data;
ipR=*(IP_HEADER *)(data + sizeof(ETH_HEADER));
icmpS.type=5;
icmpS.code=1;
icmpS.checksum=0;
routeIP=myIP;
memcpy(ipHadd8,data + sizeof(ETH_HEADER),sizeof(ipHadd8)); ipS.checksum=0;
ipS.destip=ipR.sourceip; //这里对吗?
ipS.frag_and_flags=0/*htons(16384)*/;
ipS.h_lenver=(4<<4|sizeof(IP_HEADER)/sizeof(unsigned int));
ipS.ident=htons(12345);
ipS.protocol=IPPROTO_ICMP;
ipS.sourceip=ipR.destip; //这里对吗?
ipS.tos=0;
ipS.total_len=htons(sizeof(IP_HEADER)+sizeof(ICMP_HEADER)+sizeof(routeIP)+sizeof(ipHadd8));
ipS.ttl=255; memset(temp,0,sizeof(temp));
memcpy(temp,&icmpS,sizeof(ICMP_HEADER));
memcpy(temp+sizeof(ICMP_HEADER),&routeIP,sizeof(routeIP));
memcpy(temp+sizeof(ICMP_HEADER)+sizeof(routeIP),ipHadd8,sizeof(ipHadd8));
icmpS.checksum=checksum((USHORT *)temp,sizeof(ICMP_HEADER)+sizeof(routeIP)+sizeof(ipHadd8)); //计算校验和
memset(temp,0,sizeof(temp));
memcpy(temp,&ipS,sizeof(IP_HEADER));
ipS.checksum=checksum((USHORT *)temp,sizeof(IP_HEADER)); //计算校验和 ethS.Ethertype=htons(ETH_IP);
memcpy(ethS.DesMAC,ethR.SrcMAC,6);
memcpy(ethS.SrcMAC,myMAC,6); memset(sendBuf,0,sizeof(sendBuf));
memcpy(sendBuf,ðS,sizeof(ETH_HEADER));
memcpy(sendBuf+sizeof(ETH_HEADER),&ipS,sizeof(IP_HEADER));
memcpy(sendBuf+sizeof(ETH_HEADER)+sizeof(IP_HEADER),&icmpS,sizeof(ICMP_HEADER));
memcpy(sendBuf+sizeof(ETH_HEADER)+sizeof(IP_HEADER)+sizeof(ICMP_HEADER),&routeIP,sizeof(routeIP));
memcpy(sendBuf+sizeof(ETH_HEADER)+sizeof(IP_HEADER)+sizeof(ICMP_HEADER)+sizeof(routeIP),ipHadd8,sizeof(ipHadd8)); //发送伪ICMP重定向报文
if(-1==pcap_sendpacket(adhandle,(u_char *)sendBuf,sizeof(ETH_HEADER)+sizeof(IP_HEADER)+sizeof(ICMP_HEADER)+sizeof(routeIP)+sizeof(ipHadd8)))
outputSysInfo("发送伪ICMP重定向报文失败!");
else outputListenInfo("成功发送一个伪造ICMP重定向报文!");
}
而你这边服务器的配置为192.168.0.1当服务器收到用户的ethernet地址后,同时也能获取它的ip设置
这时候,服务器发一个arp的响应给用户,让用户电脑认为它的网关10.0.0.1是存在的
服务器然后发一个icmp重定向给局域网,告诉网内所有发向10.0.0.1的请求,让它走向192.168.0.1即可
,当然,路由要在ethernet实现,光ip层是不够的
你有没有在最坏情况下测试过?
即:
1、客户IP 与 服务器IP不同子网;
2、无网关;
3、无DNS;我是这种状况下测试的,此时,客户端会在本地子网上广播名称解析包,如下:
客户配置
IP:192.168.1.100
mask:255.255.255.0
DNS:无
gateway:无服务配置:
IP:150.0.1.1
mask:255.255.254.0当客户端在IE中输入 www.abc.com 时,会在其本地子网(目标IP为192.168.1.255)上广播一个NBNS包,查询www.abc.com 的IP是多少?在经服务端NBNS欺骗后,客户会收到www.abc.com 的IP是 150.0.1.1 ,但仍然没有达到更改客户的
route table
此时nbt欺骗时候,将abc.com的解析为192.168.1.1给客户,然后也用icmp redirect一下,让网内所有发向192.168.1.1的包发向服务器你看行不?