|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。
一.JPCAP简介
尽人皆知,JAVA言语固然在TCP/UDP传输方面赐与了优秀的界说,但关于收集层以下的把持,倒是力所不及的。
JPCAP扩大包填补了这一点。JPCAP实践上并不是一个真正往完成对数据链路层的把持,而是一其中间件,JPCAP挪用wincap/libpcap,而给JAVA言语供应一个大众的接口,从而完成了平台有关性。在官方网站上声明,JPCAP撑持FreeBSD3.x,LinuxRedHat6.1,FedoraCore4,Solaris,andMicrosoftWindows2000/XP等体系。
二.JPCAP机制
JPCAP的全部布局大致上跟wincap/libpcap是很相像的,比方NetworkInterface类对应wincap的typedefstruct_ADAPTERADAPTER,getDeviceList()对应pcap_findalldevs()等等。JPCAP有16个类,上面就个中最主要的4个类做申明。
1.NetworkInterface该类的每个实例代表一个收集设备,一样平常就是网卡。这个类只要一些数据成员,除承继自java.lang.Object的基础办法之外,没有界说别的办法。
数据成员NetworkInterfaceAddress[]addresses这个接口的收集地点。设定为数组应当是思索到有些设备同时毗连多条线路,比方路由器。但我们的PC机的网卡一样平常只要一条线路,以是我们一样平常取addresses[0]就够了。java.lang.Stringdatalink_description.数据链路层的形貌。形貌地点的局域网是甚么网。比方,以太网(Ethernet)、无线LAN网(wirelessLAN)、令牌环网(tokenring)等等。java.lang.Stringdatalink_name该收集设备所对应数据链路层的称号。详细来讲,比方Ethernet10M、100M、1000M等等。java.lang.Stringdescription网卡是XXXX牌子XXXX型号之类的形貌。比方我的网卡形貌:RealtekRTL8169/8110FamilyGigabitEthernetNICbooleanLoopback标记这个设备是不是loopback设备。byte[]mac_address网卡的MAC地点,6个字节。java.lang.StringName这个设备的称号。比方我的网卡称号:DeviceNPF_{3CE5FDA5-E15D-4F87-B217-255BCB351CD5}2.JpcapCaptor
该类供应了一系列静态办法完成一些基础的功效。该类一个实例代表创建了一个与指定设备的链接,能够经由过程该类的实例来把持设备,比方设定网卡形式、设定过滤关头字等等。
数据成员intdropped_packets丢弃的包的数量。protectedintID这个数据成员在官方文档中并没有做任何申明,检察JPCAP源代码能够发明这个ID实践上在其JNI的C代码部分传出去的,这类自己并没有做出界说,以是是供其外部利用的。实践上在对JpcapCator实例的利用中也没有举措挪用此数据成员。protectedstaticboolean[]instanciatedFlag一样在官方文档中没有做任何申明,估量其为供外部利用。protectedstaticintMAX_NUMBER_OF_INSTANCE一样在官方文档中没有做任何申明,估量其为供外部利用。intreceived_packets
收到的包的数量办法成员staticNetworkInterface[]getDeviceList()
前往一个收集设备列表。staticJpcapCaptoropenDevice(NetworkInterfaceinterface,intsnaplen,booleanpromisc,intto_ms)
创立一个与指定设备的毗连并前往该毗连。注重,以上两个办法都是静态办法。Interface:要翻开毗连的设备的实例;Snaplen:这个是对照简单弄混的一个参数。实在这个参数不是限定只能捕获几数据包,而是限定每次收到一个数据包,只提取该数据包中前几字节;Promisc:设置是不是混同形式。处于混同形式将吸收一切数据包,若以后又挪用了包过滤函数setFilter()将不起任何感化;To_ms:这个参数次要用于processPacket()办法,指定超时的工夫;voidClose()
封闭挪用该办法的设备的毗连,相对openDivece()翻开毗连。JpcapSendergetJpcapSenderInstance()
该前往一个JpcapSender实例,JpcapSender类是专门用于把持设备的发送数据包的功效的类。PacketgetPacket()
捕获并前往一个数据包。这是JpcapCaptor实例中四种捕获包的办法之一。intloopPacket(intcount,PacketReceiverhandler)
捕获指定命目标数据包,并交由完成了PacketReceiver接口的类的实例处置,并前往捕获到的数据包数量。假如count参数设为-1,那末无穷轮回地捕获数据。这个办法不受超时的影响。还记得openDivice()中的to_ms参数么?谁人参数对这个办法没有影响,假如没有捕获到指定命目数据包,那末这个办法将一向堵塞守候。PacketReceiver中只要一个笼统办法voidreceive(Packetp)。intprocessPacket(intcount,PacketReceiverhandler)
跟loopPacket()功效一样,独一的区分是这个办法受超时的影响,凌驾指准时间主动前往捕获到数据包的数量。intdispatchPacket(intcount,PacketReceiverhandler)
跟processPacket()功效一样,区分是这个办法能够处于“non-blocking”形式事情,在这类形式下dispatchPacket()大概当即前往,即便没有捕获就任何数据包。voidsetFilter(java.lang.Stringcondition,booleanoptimize)
.condition:设定要提取的包的关头字。Optimize:这个参数在申明文档和源代码中都没有申明,只是说这个参数假如为真,那末过滤器将处于优化形式。voidsetNonBlockingMode(booleannonblocking)假如值为“true”,那末设定为“non-blocking”形式。voidbreakLoop()当挪用processPacket()和loopPacket()后,再挪用这个办法能够强迫让processPacket()和loopPacket()中断。3.JpcapSender
该类专门用于把持数据包的发送。
办法成员voidclose()
强迫封闭这个毗连。staticJpcapSenderopenRawSocket()这个办法前往的JpcapSender实例发送数据包时将主动填写数据链路层头部分。voidsendPacket(Packetpacket)
JpcapSender最主要的功效,发送数据包。必要注重的是,假如挪用这个办法的实例是由JpcapCaptor的getJpcapSenderInstance()失掉的话,必要本人设定命据链路层的头,而假如是由下面的openRawSocket()失掉的话,那末无需也不克不及设置,数据链路层的头部将由体系主动天生。4.Packet这个是一切别的数据包类的父类。Jpcap所撑持的数据包有:
ARPPacket、DatalinkPacket、EthernetPacket、ICMPPacket、IPPacket、TCPPacket、UDPPacket
三.利用JPCAP完成监听
1.监听道理在具体说用JPCAP完成收集监听完成前,先复杂先容下监听的道理。局域网监听使用的是所谓的“ARP棍骗”手艺。在之前已经一段阶段,局域网的结构是利用总线式(或集线式)布局,要抵达监听只必要将网卡设定为混同形式便可,但如今的局域收集广泛接纳的是互换式收集,以是纯真靠混同形式来到达监听的办法已不成行了。以是为了到达监听的目标,我们必要“棍骗”路由器、“棍骗”互换机,即“ARP棍骗”手艺。
假定本机为A,监听方针为B。
起首,假造一个ARPREPLY包,数据链路层头及ARP内容部分的源MAC地点填进A的MAC地点,而源IP部分填进网关IP,目标地点填进B的MAC、IP,然后将这个包发送给B,而B吸收到这个假造的ARPREPLY包后,因为源IP为网关IP,因而在它的ARP缓存内外革新了一项,将(网关IP,网关MAC)革新成(网关IP,A的MAC)。而B要会见内部的网都必要经由网关,这时候候这些要经由网关的包就统统流到A的呆板下去了。接着,再假造一个ARPREPLY包,数据链路层头及ARP内容部分的源MAC地点填进A的MAC地点,而源IP部分填进B的IP,目标地点填进网关MAC、IP,然后将这个包发给网关,网关吸收到这个假造的ARPREPLY包后,因为源IP为B的IP,因而在它的ARP缓存内外革新了一项,将(B的IP,B的MAC)革新成(B的IP,A的MAC)。这时候候内部传给B的数据包经由网关时,就统统转发给A。如许还只是拦阻了B的数据包罢了,B其实不能上彀——办理办法是将吸收到的包,除目标地点部分稍做修正,别的一成不变的再转收回往,如许就到达了监听的目标——在B不知不觉中扫瞄了B一切的对外数据包。
ARP数据包剖析单位:ByteEthernet头部ARP数据部分66222224646方针MAC地点源地MAC地点范例号0x0800:ip0x0806:ARP局域网范例以太网0x0001收集协定范例IP收集0x0800MAC/IP地点长度,恒为0x06/04ARP包范例REPLY0x0002ARP方针IP地点ARP方针MAC地点ARP源IP地点ARP源MAC地点<p>
市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。 |
|