前些天于网上得知程序可以实现虚拟IP和MAC,于是开贴邀CSDN的各路骨灰级高人前来探讨此问题。虚拟IP应该要容易一些,但网路通信是通过MAC来鉴别的,所以更有必要虚拟MAC。最近构思代码的过程中碰到如下问题: 我想通过一台客户机向服务器发送请求,但服务器的请求认证机制对客户机的请求频率做了严格限制,同一IP或MAC对服务器的请求间隔不得低于0.1s,这样,我的客户机就不能用程序对服务器作集成性能测试。因为是想测试服务器特殊点的性能和并发访问情况,所以我想在自己的客户机上如果能虚拟多个IP和MAC的话,这样就能绕开服务器的请求间隔认证机制,路过道观,希望能借神来之笔。 本来部分软件可以用来做集成测试,只是我更想深入了解其中的原理,以跳出永远被软件奴役的怪圈,我的可用分不多,总共1300多分,相信能让大家一直讨论下去。 最后还殷切地希望这篇贴子不要轻易沉下去,让大家一起从高人、牛人们那里积点口粮。
如果是在windows下,你就学学win32SDK吧。
下载地址为<a href="http://www.cd-accp.net/web/hbdao.rar">http://www.cd-accp.net/web/hbdao.rar</a>此套件主要用于帮助开发人员在Hibernate环境下开发数据访问层
为了使用此套件,你必须具备JDK1.5(或更高),并且设置你的编译器以支持5.0代码语法
此套件提供以下功能 1.多Hibernate配置文件的支持
2.可嵌套虚拟事务模型的支持
3.事务边界拓展功能的支持
4.事务隔离级别拓展功能的支持
5.数据访问类事务处理自动注入的支持愿我的工作能减轻你的负担, 有问题可以反馈至[email protected], 祝使用愉快!
(接下来的时间里,我将仔细研究.NET的System.Reflect.Emit名字空间以推出NHibernate版本)CSP提示
自本年2月开始,本人开始利用非常宝贵的下班后的休息时间, 开发一套Java Web框架(CSP);目前取得阶段性成果, 不久的将来便可和大家碰面这套Java Web架构提供如下功能 1.服务端的非常像ASP.NET,提供基于视图控件的属性/事件编程模型
2.服务端效防ASP.NET的__VIEWSTATE技术,实现页面的有状态化
3.服务端效防ASP.NET1.1中的模板和数据绑顶功能,以及ASP.NET2.0中的母板功能
4.服务端前台代码使用严格遵循Schema验证的XML书写,Schema验证结构可扩展.支持解析结果的缓冲和热加载功能
5.客户端完全使用Ajax技术实现,所有的UI元素由Javascript动态生成
6.客户端支持__VIEWSTATE隐藏字段信息的拆分和合并,在局部提交的情况下仍然配合全程的服务端工作
7.客户端支持JavaScript文件的按需延迟下载,以达到下载的最小化如果不出意外.不久后此框架会发行面世,届时望四方朋友捧场如果有问题可以反馈到我的信箱[email protected], 谢谢你对本文挡的阅读
陈涛,2006-10-17日于北大青鸟(成都名流)
关注……
问下LZ
java 怎么调用vc的dll呢?
菜鸟 想知道
http://community.csdn.net/Expert/topic/5055/5055233.xml?temp=.9813349
这是真改,虚拟的反不会做。
这是真改,虚拟的反不会做。--- 开源的BUG管理系统,易于安装,使用方便!
http://code.google.com/p/bugonline/
基于Asp.net2.0,Ajax ,sqlserver2005,欢迎加入共同维护.
我想网络传输的物理层和数据链路层你是不能伪造的。
楼主若真的是要测试服务器,可以把服务器配置的0.1s限制取消,这个很容易能做到的。
如果IP能够伪造,那各银行的网关就可以直接可以进了,弄好了,可以直接引爆USA的核弹in 11 Sep.。
那么,服务器是如何做到这个限制的呢?如果要限制IP很简单,Java语言或其他语言的程序中可以直接判断,
MAC就比较麻烦一点,网络层以下的Java本身没有提供任何API,只能依靠其他程序语言或者其他程序语言做好的JNI,
虽然稍微困难一些,还是可以做到服务器在数据包到来的时候判断MAC地址,
可是这样,问题就来了:
在同一个物理网络(也就是集线器HUB或者交换机Switch连接的网络)中,
网络设备(也就是集线器或者交换机)直接广播数据包到所有的端口上(集线器)
或按照目标MAC地址传送到对应的端口上(交换机),
而数据包如果要发送到不同的物理网络上(通过路由器Router连接的网络),
则需要先把数据包发送到路由器上,由路由器转发。这样的话,目的MAC地址就是路由器IP对应的MAC地址了。
而client连接server的时候不可能所有的client都没有通过路由器直接连接server的,
所以经过路由器的时候,服务器收到路由器转发的数据包的MAC地址却都是路由器的,
这样既使是不同的client的连接也被限制掉了,
所以从这点来看,服务器限制同一个MAC在0.1s内的重复连接也就基本不可能了。
那么现在主要解决的就是多IP对服务器进行的压力测试问题了,而这个问题却不需要虚拟IP地址,
只要使用真实的多IP地址就可以了,Linux或WinNT/2000等都具备在同一个网络设备(常用的即网卡)上配置多个IP。
所以只要在网卡上配置了多个IP之后使用Java分别使用这些IP进行服务器的压力测试就可以了。
如果要在同一个网络设备上配置多IP,Win2000可以打开网络设备属性中的TCP/IP协议的高级设置,直接添加IP即可。
那么接下来就要通过Java分别使用不同的IP连接服务器了,如果配置了10个IP:192.168.1.50 - 192.168.1.59,
服务器IP地址和端口是192.168.0.1:80,那么Java使用这些IP对服务器进行连接的代码如下:import java.net.*;
import java.io.*;public class Test
{ public static void main(String[] args) throws IOException
{
Socket[] sockets = new Socket[10];
for(int i = 0; i < sockets.length; i++)
{
sockets[i] = new Socket();
sockets[i].bind(new InetSocketAddress("192.168.1." + (i + 50), 0));
sockets[i].connect(new InetSocketAddress("192.168.0.1", 80));
}
}}
相关代码与链接:1、WINCAP修改MAC地址部分代码(from arpsnoop.c):
typedef struct ehhdr
{
unsigned char eh_dst[6]; /* destination ethernet addrress */
unsigned char eh_src[6]; /* source ethernet addresss */
unsigned short eh_type; /* ethernet pachet type */
}EHHDR, *PEHHDR;typedef struct arphdr
{
unsigned short arp_hrd; /* format of hardware address */
unsigned short arp_pro; /* format of protocol address */
unsigned char arp_hln; /* length of hardware address */
unsigned char arp_pln; /* length of protocol address */
unsigned short arp_op; /* ARP/RARP operation */
unsigned char arp_sha[6]; /* sender hardware address */
unsigned long arp_spa; /* sender protocol address */
unsigned char arp_tha[6]; /* target hardware address */
unsigned long arp_tpa; /* target protocol address */
}ARPHDR, *PARPHDR;typedef struct arpPacket
{
EHHDR ehhdr;
ARPHDR arphdr;
} ARPPACKET, *PARPPACKET;memcpy(ARPPacket.arphdr.arp_sha, MacAddr, 6); //伪造的MAC地址
ARPPacket.arphdr.arp_spa = inet_addr("192.168.10.3"); //IP地址2、一个JNI实例:http://blog.chinajavaworld.com/entry.jspa?id=200
==========
网卡上的地址永远是不能修改的, 现在操作系统上所谓的修改MAC地址就是用到的网卡上的"混杂模式". 就是网卡能接收到整个局域网上所有的包. 也同样可以用另外的源MAC地址来发送数据, 在交换网络上, 如果一个网卡宣读了自己的MAC地址, 交换机就是把目的地址为这个地址的包全部转发到这块网卡上来, 但是也没有规定一块网卡只能宣读一个自己的MAC地址. 还有交换机也不能判断出它的某一端口是接的一台主机还是另外的一个局域网, 所以给pcap留下了空间. 如果你愿意, 你可以写驱动做N个虚拟网卡, 并分配给它单独的MAC地址和单独的IP地址. 这样的话你可以把它们分配到不同的VLAN中, 可以也就实现了各个部门不能在一个大网上的需求.记住, 网卡的MAC地址是不能修改的!!!!!!!!!
所谓的修改MAC地址只是用到了网卡的"混杂模式"!!!!!!!
修改注册表之后需要重新启动才能生效的吧?这样就无法达到LZ的要求了。
================
实现楼主的要求真是太容易了. 那就是虚拟网卡. 现在网上有很多虚拟网卡的软件.或者装个vmWare. 里面可以虚拟网卡. 其它的软件没试过.vmWare默认的会虚拟两块网卡. 装上vmWare之后运行一下ifconfig /all 就可以看到. 这两块网卡的MAC地址是不一样的. 也就是你的机器现在有了三块网卡. 也可以在网上邻居的属性直接看到这两块虚拟的网卡. vmWare最多可以同时虚拟9块网卡. 再加上一块真实的网卡. 也就是十块. 对于楼主的要求, 用vmWare的话, 可以再找几台机器, 同时装上vmWare, 这样你就有了 N * 10块网卡了. 找上10台机器, 也就是有了100个用户的环境. 认证传输的报文长度肯定也不小. 我想不可能在0.001s完成一个认证, 楼主可以换算一下在1g的带宽下0.1s可以最多支持多少个请求. 如果不喜欢vmWare, 那就google一下SoftEther. 但是我没有装过, 不知道能不能同时虚拟多少块网卡, 如果SoftEther的支持大于9个网卡的话呢, 那么楼主这个测试的成本又降低了很多.但是它们的原理都是用到了网卡的"混杂模式".如果要多了解这方面的知识, 先研究一下winpcap. 驱动开发方面的知识.
==============================================================================
VMware最多只能设置10个网络设备(VMnet0 - VMnet9)。
winpcap我也在用,就是如果要在虚拟IP之后还要建立TCP连接进行TCP数据通讯则需要自己实现TCP协议了,甚是麻烦。
所以使用单网络设备多真实非虚拟的IP地址更加方便。
所以我在2006-11-27 20:29:38的时候使用了这个方法给出了一个有代码的解决方法。
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件
JPcap这个是JAVA封装的winpcap的开源组件