仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1237|回复: 18
打印 上一主题 下一主题

[学习教程] 了解下JAVA的JPCAP-JAVA中的数据链路层把持

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:34:35 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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#不一定都能做到。毕竟是抄袭吗。
小女巫 该用户已被删除
沙发
 楼主| 发表于 2015-2-20 00:50:15 | 显示全部楼层
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-18 05:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表