|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 sone 于 2013-8-11 06:18 编辑
源帖子:http://www.routerclub.com/thread-70269-1-1.html 注意看里面给出的视频。
SVN源代码管理地址(使用SVN或者TSVN等工具Check out出来所有源码即可):https:\\svn.silmoon.com:8443/svn/hijackingServer/,用户名密码都是public。
项目使用.NET4.0,开发环境VS2012,项目有几个依赖库,比如Silmoon.dll,Silmoon的源代码在:https:\\code.google.com/p/silmoon-dotnet-library/source/checkout
开发支持和技术支持询问需要支付费用(三千+-,可刀),我不是为了赚那两个小钱,而是我真比较忙。不要钱和询问的人浪费时间我就属于赔钱。。。
我i的邮箱sone(at)silmoon.com
我这种授权费用模式和Linux一样。本身免费,打扰Linux基金会的事情就不免费了。
源代码支持ros的Packet Sniffer或者交换机和网络设备的镜像(支持原始Socket(RawSocket)和Winpcap两种监听模式)。在使用过程中根据需要开一个就行,详情在配置文件中。
模式是,将用户上网数据旁路镜像或者说复制一份给程序,程序根据设置的规则伪装一份真实服务器的数据传递给用户,而真实的数据回来的比假的晚,所以会被丢弃。
配种文件中的
[config]
SnifferListenIP=监听的所属网卡的IP
DestAddrIP=劫持数据包发回的路由IP(多数情况下写一个不同网段或者外网的不同网段的IP也可以,因为这样这个数据包会被发到下一个路由,这个路由必须接受伪装IP的包。)
debug=true~~~~调试模式(大量数据和生成环境中应该是false)
[thread]
maxworkthread=30000
minworkthread=10000
maxiothread=100000
miniothread=30000
[sniffer]
socket=true~~~~~原始Socket监听
tzsp=false~~~~~ROS的Packet Sniffer监听
winpcap=false~~~~~Winpcap库监听,需要安装Winpcap
winpcapbyteoffset=14~~~~~IP数据在Winpcap抓包帧中的偏移,默认是14,表示前14个字节是以太网部分数据,14之后是IP数据。
deviceindex=0~~~~~Winpcap监听的网卡,以数字表示,原本Device是一个数组,这个数字表示的是Device数组中的第几个元素,也就是第几个网卡。
IP包构造部分说明
fixed (byte* pD = &hdrData[0])
{
fixed (byte* pB = &buffer[0])
{
IP* ip0 = (IP*)pB;
Tcp* tcp0 = (Tcp*)(pB + 20);
IP* ip = (IP*)pD;
Tcp* tcp = (Tcp*)(pD + 20);
ip->ip_verlen = 0x45;
///这个可以不设置,系统自动填充。
//ip->ip_totallength = (ushort)IPAddress.HostToNetworkOrder((short)(contentData.Length + 20));
ip->ip_id = (ushort)IPAddress.NetworkToHostOrder((short)(BitConverter.ToUInt16(buffer, 4) + 1));
ip->ip_flag_offset |= IPFlags.df;
ip->ip_ttl = (byte)128;
ip->ip_protocol = (byte)System.Net.Sockets.ProtocolType.Tcp;
ip->ip_srcaddr = ip0->ip_destaddr;
ip->ip_destaddr = ip0->ip_srcaddr;
tcp->source = tcp0->dest;
tcp->dest = tcp0->source;
tcp->seq = tcp0->ack_seq;
tcp->ack_seq = (uint)IPAddress.HostToNetworkOrder(IPAddress.NetworkToHostOrder(BitConverter.ToInt32(buffer, 24)) + (len - (tcp0->doff >> 2) - 20));
tcp->doff = 20 << 2;
tcp->flag |= TcpFlags.ack | TcpFlags.psh;
///window is 5120
tcp->window = 20;
..........
可以看出,我大量的在C#里面使用了指针,有效的增加性能,但是如果二次开发的人员要小心,全部都在unsafe环境中。
多的自己琢磨免费,要问我邮箱联系付费(如果你感觉两三千块钱你能拿出来的话。。。)
本人熟知网络协议,可以做各种协议的网络应用程序,有需要的可以联系我。 |
评分
-
查看全部评分
|