用Java读二进制报文、做报文分析软件

该博客介绍了如何使用Java读取二进制报文,并进行以太网帧和IP数据报的详细分析,包括硬件地址、帧类型、IP地址、端口号等关键字段的解析。
摘要由CSDN通过智能技术生成

用Java读二进制报文、做报文分析软件.分析抓包中的各个字段的含义。



package shuju;

  import java.io.*;

  import java.lang.Integer;

class shuju {

public static void main(String[] args){

String fileName="D:\\报文1.bin";

try {

     DataInputStream instr=new DataInputStream(new BufferedInputStream(new FileInputStream(fileName)));

byte [] array=new  byte [instr.available()];

 

instr.read(array);

instr.close();

System.out.print(byte2hex(array));

System.out.println();

System.out.println();

System.out.println();

System.out.println("以太网帧分析");

System.out.print("目标硬件地址:");

    System.out.println(byte2hex(array,0,6));

    System.out.print("源硬件地址:");

    System.out.println(byte2hex(array,6,12));

    

    if(byte2hex(array,12,14).equals("0800"))

    {

    System.out.println("帧类型是IP数据报");

    }

    else if(byte2hex(array,12,14).equals("0806")){

    System.out.println("帧类型是ARP数据报");

    System.out.print("源IP地址:");

            for(int i=28;i<31;i++){

System.out.print(Integer.parseInt(byte2hex(array,i,i+1),16));

System.out.print(":");

}

            System.out.print(Integer.parseInt(byte2hex(array,31,32),16));

    System.out.println();

    Syst

Java二进制数组转换为报文格式显示,可以使用Java的Hex工具类来实现。具体步骤如下: 1. 导入Hex工具类。在Java 8及以上版本中,Hex工具类已经加入了标准库,可以直接使用。如果是Java 7及以下版本,可以使用第三方库,比如Apache Commons Codec。 2. 将二进制数组转换为十六进制字符串。可以使用Hex工具类的静态方法`encodeHexString`来实现。 3. 将十六进制字符串按照报文格式显示。具体格式参考RTP请求报文格式。 示例代码如下: ```java import java.util.Arrays; import org.apache.commons.codec.binary.Hex; public class Main { public static void main(String[] args) { byte[] data = new byte[] { (byte) 0x80, 0x60, 0x00, 0x26, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; String hexString = Hex.encodeHexString(data); String[] lines = hexString.split("(?<=\\G.{2})"); String formattedString = ""; for (int i = 0; i < lines.length; i++) { if (i % 4 == 0) { formattedString += "\n"; } formattedString += " " + lines[i]; } System.out.println(formattedString); } } ``` 输出结果如下: ``` 80 60 00 26 02 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ``` 注意:这里的输出结果中,每4个字节(8个十六进制数字)为一行,每行前面有一个空格。实际应用中,格式可以根据需要进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值