2010-08-26 46 views
4

我正在寻找一个Java库,它可以让我访问原始以太网帧,以便读取和发送它们。我的最终目标是创建一个BACnet以太网网络扫描器。原始以太网的Java库

请注意,我不是在寻找TCP \ IP。

任何人都知道这样做的好图书馆?

回答

6

也许Jpcap可以提供帮助。请注意,有一个名称相同的Sourceforge项目,但它似乎不是同一个项目。

下面是一个使用JPCAP发送一个TCP数据包和以太网帧一些示例代码(从库的教程):

编辑:示例代码创建一个TCPPacket,但你可以创建一个普通Packet代替。

//open a network interface to send a packet to 
JpcapSender sender=JpcapSender.openDevice(devices[index]); 

//create a TCP packet with specified port numbers, flags, and other parameters 
TCPPacket p=new TCPPacket(12,34,56,78,false,false,false,false,true,true,true,true,10,10); 

//specify IPv4 header parameters 
p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_TCP, 
    InetAddress.getByName("www.microsoft.com"),InetAddress.getByName("www.google.com")); 

//set the data field of the packet 
p.data=("data").getBytes(); 

//create an Ethernet packet (frame) 
EthernetPacket ether=new EthernetPacket(); 
//set frame type as IP 
ether.frametype=EthernetPacket.ETHERTYPE_IP; 
//set source and destination MAC addresses 
ether.src_mac=new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5}; 
ether.dst_mac=new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10}; 

//set the datalink frame of the packet p as ether 
p.datalink=ether; 

//send the packet p 
sender.sendPacket(p); 

sender.close();