前些天于网上得知程序可以实现虚拟IP和MAC,于是开贴邀CSDN的各路骨灰级高人前来探讨此问题。虚拟IP应该要容易一些,但网路通信是通过MAC来鉴别的,所以更有必要虚拟MAC。最近构思代码的过程中碰到如下问题:    我想通过一台客户机向服务器发送请求,但服务器的请求认证机制对客户机的请求频率做了严格限制,同一IP或MAC对服务器的请求间隔不得低于0.1s,这样,我的客户机就不能用程序对服务器作集成性能测试。因为是想测试服务器特殊点的性能和并发访问情况,所以我想在自己的客户机上如果能虚拟多个IP和MAC的话,这样就能绕开服务器的请求间隔认证机制,路过道观,希望能借神来之笔。    本来部分软件可以用来做集成测试,只是我更想深入了解其中的原理,以跳出永远被软件奴役的怪圈,我的可用分不多,总共1300多分,相信能让大家一直讨论下去。    最后还殷切地希望这篇贴子不要轻易沉下去,让大家一起从高人、牛人们那里积点口粮。

解决方案 »

  1.   

    what do you want to do!
      

  2.   

    To ldianfeng(教授) 非常感谢您的回答,可否详细些或者是提供一些相关的资料,再次感谢!
      

  3.   

    谢谢xinshou1979330(Success.java),朋友真仗义,哈!
      

  4.   

    用vc什么的写一个dll,然后用java的jni调用就可以了。
      

  5.   

    嗯,只能借助其他的工具了vc 写个dll,java 调用
      

  6.   

    如果用VC写DLL,有没有类似的代码实例?
      

  7.   

    单单用java实现不了D~~~
    如果是在windows下,你就学学win32SDK吧。
      

  8.   

    个人作品,欢迎下载Hibernate固强,然用之稍烦.近常思于此而略有心得,故作此小东东以简化之.限予之技而难逃龌龊之举,望各大虾批评指正此套件虽然小,但是可以帮助你在实际项目中提高Hibernate的使用速度
    下载地址为<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日于北大青鸟(成都名流)
      

  9.   

    谢谢 CAYU(中原) ,不过VC我还没学习的呢
      

  10.   

    这个需要 jni 支持。而技术核心不在 java 这头。
    关注……
      

  11.   

    听大家这么一说,好像用Java实现挺难的。不过,用其它技术也行,请大家了解的能贴上相关的技术性URL出来,一起分享,谢谢。
      

  12.   

    顶下先
    问下LZ 
    java 怎么调用vc的dll呢?
    菜鸟 想知道
      

  13.   

    这种问题上java视线(www.javaeye.com)比较有可能知道答案,csdn没什么高手。 
      

  14.   

    你是用什么方式向服务器发送请求呢?是udp还是tcp/ip?不管用哪种方式,都是可以修改连接的信息的吧,我猜想是这样的。
      

  15.   

    非常同意fxbird(昨天晚上我可能死了) 的说法,只要在CSDN上问一个稍难一点的Question,准没有答案,我真怀疑那几颗星星是不是都只拿5~6K的月薪,或者忙到连做技术研究都没时间,唉!
      

  16.   

    非得用Java? 网络层以下的只有借助JNI, 如果做应用的集成测试, 没有必要用到虚拟Mac呀, 不是太明白你的意图. 是想实现一个应用功能呢, 还是要展示你的技术能力?
      

  17.   

    To TinyJimmy(Jimmy) ,非常感谢你的回复!JNI可用调用VC的DLL模块,因为没有VC基础,所以想听听大家的思路,我在网上简单搜索了相关内容,后来听说网路通信是通过MAC来鉴别的,考虑到虚拟IP的有效性,所以问题就变成了IP和MAC。因为不太了解相关方面的原理,也不清楚一些软件的测试环境是怎么搭建的,其实自己也用了几款压力测试工具,感觉并不能按照自己的意图去测试网站的某些定制功能。目前我已经用Java搭建了虚拟Web运行环境,可是底层的IP和MAC根本没有思路,想到CSDN,于是就来赶赶场……再次感谢你的回复,希望是骨灰级的都来凑凑思路,谢谢!
      

  18.   

    虚似多个MAC不会,修改本机MAC倒做过,改注册表就可以了(BCB的,用VC或其它语言类同):
    http://community.csdn.net/Expert/topic/5055/5055233.xml?temp=.9813349
      

  19.   

    首先第一步用vb或者vc编写一个读取computer上的网卡mac地址的控件或者用java编写程序测其IP。然后放在网上用<object>...调用,测出客户机mac地址后再对其进行监测。不难啊。
      

  20.   

    修改mac的方案就算了,不优雅。只想知道如何动态虚拟mac :)
      

  21.   

    用wincap包可以实现这个功能. 不过wincap是用C写的, JAVA不熟, 听楼上的可把用java调用C的native api. wincap是UNIX下的pcap的WIN32版本. 非常好用. 华为里面的WVRP低层就是用的wincap来虚拟路由器的. 可见wincap的功能是非常强大的.下载一个研究一下吧. good luck. :)
      

  22.   

    以前做硬件开发时做过刷网卡EPROM的程序,Mac就存在里面,想改哪个就改哪个!呵呵!
    这是真改,虚拟的反不会做。
      

  23.   

    以前做硬件开发时做过刷网卡EPROM的程序,Mac就存在里面,想改哪个就改哪个!呵呵!
    这是真改,虚拟的反不会做。--- 开源的BUG管理系统,易于安装,使用方便! 
    http://code.google.com/p/bugonline/
    基于Asp.net2.0,Ajax ,sqlserver2005,欢迎加入共同维护.
      

  24.   

    IP倒是不难,但是前题是你有那么多IP,或是有人给你做代理。
    我想网络传输的物理层和数据链路层你是不能伪造的。
    楼主若真的是要测试服务器,可以把服务器配置的0.1s限制取消,这个很容易能做到的。
    如果IP能够伪造,那各银行的网关就可以直接可以进了,弄好了,可以直接引爆USA的核弹in 11 Sep.。
      

  25.   

    首先,需要明确需求,要做的是做服务器压力测试,而服务器限制同一个IP或MAC在0.1s内重复连接。
    那么,服务器是如何做到这个限制的呢?如果要限制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));
            }
        }}
      

  26.   

    其实答案已经出来了。在本机安装wincap,使支持MAC地址修改。用WIN32 API开发相关程序生成最终可调用的DLL,通过JNI调用DLL方法。
    相关代码与链接: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
      

  27.   

    用wincap修改MAC,IP后返回的报文如何获取呢,接收方可是按报文中的源地址发送回复报文。
      

  28.   

    indexchen(Index) ( ) 
    ==========
    网卡上的地址永远是不能修改的, 现在操作系统上所谓的修改MAC地址就是用到的网卡上的"混杂模式". 就是网卡能接收到整个局域网上所有的包. 也同样可以用另外的源MAC地址来发送数据, 在交换网络上, 如果一个网卡宣读了自己的MAC地址, 交换机就是把目的地址为这个地址的包全部转发到这块网卡上来, 但是也没有规定一块网卡只能宣读一个自己的MAC地址. 还有交换机也不能判断出它的某一端口是接的一台主机还是另外的一个局域网, 所以给pcap留下了空间. 如果你愿意, 你可以写驱动做N个虚拟网卡, 并分配给它单独的MAC地址和单独的IP地址. 这样的话你可以把它们分配到不同的VLAN中, 可以也就实现了各个部门不能在一个大网上的需求.记住, 网卡的MAC地址是不能修改的!!!!!!!!!
    所谓的修改MAC地址只是用到了网卡的"混杂模式"!!!!!!!
      

  29.   

    高手啊。vwindows不是直接可以修改mac地址吗?
      

  30.   

    通过Windows注册表修改MAC地址的原理就是. Windows把网卡设置成"混杂模式". 以后就一直用修改后的MAC地址来进行传输, 包括接收目的地址为修改后的MAC地址的包, 发送时把源地址换成为修改后的MAC地址. 在网络上传输的原MAC地址的包, Windows将不会在处理. 这就是你们理解的MAC地址可修改的真相.这样的修改是不会修改固化在网卡上的MAC地址的!!!!!!!!!当然现在有的网卡支持修改网卡上的MAC地址. 这样的网卡的MAC地址是放在网卡上的一个可擦写的地方. 这个地址也不是能在Windows下能修改的, 除非实模式的操作系统下修改.弟兄们, 下载个Winpcap的源码看看吧. 或者以后用Unix之后的操作系统吧..求求你们了!!!一直以来, 上csdn只是去"扩充话题"里看看, 但是这几天, 这样的帖子竟然可以上csdn bss的头条..可见上csdn的兄弟们的水平!!!!!!汗颜...
      

  31.   

    楼上的Garibaldi(Garibaldi):
    修改注册表之后需要重新启动才能生效的吧?这样就无法达到LZ的要求了。
      

  32.   

    to yingle2000(音乐天堂) ( )
    ================
    实现楼主的要求真是太容易了. 那就是虚拟网卡. 现在网上有很多虚拟网卡的软件.或者装个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. 驱动开发方面的知识.
      

  33.   

    i just want to know the answer one apple not one apple !
      

  34.   

    to: Garibaldi(Garibaldi) ( ) 信誉:100    Blog  2006-11-28 19:04:05  得分: 0  
    ==============================================================================
    VMware最多只能设置10个网络设备(VMnet0 - VMnet9)。
    winpcap我也在用,就是如果要在虚拟IP之后还要建立TCP连接进行TCP数据通讯则需要自己实现TCP协议了,甚是麻烦。
    所以使用单网络设备多真实非虚拟的IP地址更加方便。
    所以我在2006-11-27 20:29:38的时候使用了这个方法给出了一个有代码的解决方法。
      

  35.   

    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的开源组件
    JPcap这个是JAVA封装的winpcap的开源组件