仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1217|回复: 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-1-21 10:25:31 来自手机 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
山那边是海 该用户已被删除
板凳
发表于 2015-1-26 13:15:08 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
简单生活 该用户已被删除
地板
发表于 2015-2-10 01:42:48 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
变相怪杰 该用户已被删除
5#
发表于 2015-2-12 08:49:52 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
只想知道 该用户已被删除
6#
发表于 2015-2-16 11:22:28 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
小女巫 该用户已被删除
7#
 楼主| 发表于 2015-2-20 00:50:15 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-6 16:01:00 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-11 17:32:35 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
活着的死人 该用户已被删除
10#
发表于 2015-3-19 03:46:41 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
透明 该用户已被删除
11#
发表于 2015-3-20 12:36:26 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
兰色精灵 该用户已被删除
12#
发表于 2015-4-16 22:51:11 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
再见西城 该用户已被删除
13#
发表于 2015-4-25 10:34:30 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
分手快乐 该用户已被删除
14#
发表于 2015-5-4 15:06:23 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
愤怒的大鸟 该用户已被删除
15#
发表于 2015-6-7 21:40:20 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
老尸 该用户已被删除
16#
发表于 2015-6-12 15:29:14 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
飘灵儿 该用户已被删除
17#
发表于 2015-6-30 04:47:51 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
海妖 该用户已被删除
18#
发表于 2015-7-3 12:06:52 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
柔情似水 该用户已被删除
19#
发表于 2015-7-8 14:20:20 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 14:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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