我有一个EOC设备。它包含一些参数。我想从设备中检索这些参数。首先我向设备发送TCP请求包然后设备发送响应数据包。根据设备协议格式化请求数据包。我附加请求分组结构。我使用jNetpcap但是我无法接收数据包。这是数据包结构化的代码
enter code here
byte[] myByteArray = new byte[22];
byte[] cr_eth_address_dest = new byte[6];
byte[] cr_eth_address_src = new byte[6];
byte[] ethtype = new byte[2];
byte cmmp_ver;
byte[] cmmp_type = new byte[2];
byte[] cmmp_seq_no = new byte[2];
byte[] oui = new byte[3];
// cr_eth_address_dest initialization
cr_eth_address_dest[0] = (byte)0xAA;
cr_eth_address_dest[1] =(byte)0xBB;
cr_eth_address_dest[2] = (byte)0xCC;
cr_eth_address_dest[3] = (byte)0xDD;
cr_eth_address_dest[4] = (byte)0xEE;
cr_eth_address_dest[5] = (byte)0xFF;
// cr_eth_address_src initialization
cr_eth_address_src[0] = (byte)0xFC;
cr_eth_address_src[1] =(byte)0xAA;
cr_eth_address_src[2] = 14;
cr_eth_address_src[3] =(byte)0x1A;
cr_eth_address_src[4] = (byte)0xD6;
cr_eth_address_src[5] = (byte)0x2D;
// other initialization
ethtype[0]=80;//
ethtype[1]=07;
cmmp_ver=0000;
cmmp_type[0]=00;
cmmp_type[1]=00;
cmmp_seq_no[0]=0;
cmmp_seq_no[1]=1;
oui[0] = 0;
oui[1]=0;
oui[2]=0;
// myByteArray initialization
for(int i=0;i<myByteArray.length;i++){
if(i<6){
myByteArray[i]=cr_eth_address_dest[i];
}else if(i>=6&&i<12){
myByteArray[i] = cr_eth_address_src[i-6];
}else if(i>=12&&i<14){
myByteArray[i] = ethtype[i-12];
}else if(i>=14&&i<15){
myByteArray[i] = cmmp_ver;
}else if(i>=15&&i<17){
myByteArray[i] = cmmp_type[i-15];
}else if(i>=17&&i<19){
myByteArray[i] = cmmp_seq_no[i-17];
}else if(i>=19&&i<22){
myByteArray[i] = oui[i-19];
}
}
答案 0 :(得分:0)
我认为对于这个问题我需要在DataLink层上打开一个套接字。我尝试了很多东西,比如jpcap rawsocket apis.Finally我找到了JavaSock Api for raw socket。我需要更多关于这个问题的建议。所以请发表更多答案