用Java读二进制报文、做报文分析软件
来源:互联网 发布:现代年轻人社交数据 编辑:程序博客网 时间:2024/05/22 06:22
用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();
System.out.print("目的IP地址:");
for(int i=38;i<41;i++){
System.out.print(Integer.parseInt(byte2hex(array,i,i+1),16));
System.out.print(":");
}
System.out.print(Integer.parseInt(byte2hex(array,41,42),16));
}
else{
System.out.println("帧类型是的代码是"+byte2hex(array,12,14));
}
System.out.println("IP数据报分析");
System.out.println("version4");
System.out.println("总长度: "+Integer.parseInt(byte2hex(array,17,18),16));
System.out.println("生存时间:"+Integer.parseInt(byte2hex(array,23,24),16));
System.out.print("源IP地址:");
for(int i=26;i<29;i++){
System.out.print(Integer.parseInt(byte2hex(array,i,i+1),16));
System.out.print(":");
}
System.out.print(Integer.parseInt(byte2hex(array,29,30),16));
System.out.println();
System.out.print("目的IP地址:");
for(int i=30;i<33;i++){
System.out.print(Integer.parseInt(byte2hex(array,i,i+1),16));
System.out.print(":");
}
System.out.print(Integer.parseInt(byte2hex(array,33,34),16));
System.out.println();
System.out.println();
System.out.println();
if(byte2hex(array,23,24).equals("11"))
{
System.out.println("此报文是UDP报文");
System.out.print("源端口号:");
System.out.println(Integer.parseInt(byte2hex(array,34,36),16));
System.out.print("目的端口号:");
System.out.println(Integer.parseInt(byte2hex(array,36,38),16));
System.out.print("确认号:");
System.out.println(byte2hex(array,40,42));
System.out.print("数据长度:");
System.out.print(Integer.parseInt(byte2hex(array,38,40),16));
if(Integer.parseInt(byte2hex(array,36,38),16)==53){
System.out.println("封装的是DNS报文");
System.out.println("封装的长度:");
System.out.println(Integer.parseInt(byte2hex(array,38,40),16));
}
}
else if(byte2hex(array,23,24).equals("06")){
System.out.println("此报文是TCP报文");
System.out.print("源端口号:");
System.out.println(Integer.parseInt(byte2hex(array,34,36),16));
System.out.print("目的端口号:");
System.out.println(Integer.parseInt(byte2hex(array,36,38),16));
System.out.print("确认号:");
System.out.println(byte2hex(array,40,42));
System.out.print("窗口大小:");
System.out.println(Integer.parseInt(byte2hex(array,48,50),16));
System.out.print("检验和:");
System.out.println(Integer.parseInt(byte2hex(array,50,52),16));
System.out.print("紧急指针:");
System.out.println(Integer.parseInt(byte2hex(array,52,54),16));
}
else if(byte2hex(array,23,24).equals("01")){
System.out.println("此报文是ICMP报文");
System.out.println("校验和:");
}
else{
System.out.println("此报文协议号为:"+byte2hex(array,23,24));
}
}
catch(IOException eof){
System.out.println("Problem reading input");
}
}
private static String byte2hex(byte[] array,int x ,int y) {
String hs = "";
String stmp = "";
for (int n=x; n<y ; n++) {
stmp = (java.lang.Integer.toHexString(array[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
}
public static String byte2hex(byte[] array) {
String hs = "";
String stmp = "";
for (int n = 0; n < array.length; n++) {
stmp = (java.lang.Integer.toHexString(array[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
}
}
报文一:
以太网帧分析
目标硬件地址:0026820FD1AF
源硬件地址:3822D69DC48A
帧类型是IP数据报
IP数据报分析
version4
总长度: 190
生存时间:17
源IP地址:192:168:4:1
目的IP地址:10:116:181:0
此报文是UDP报文
源端口号:53
目的端口号:49626
确认号:1ECA
数据长度:170
报文二:
以太网帧分析
目标硬件地址:3822D69DC48A
源硬件地址:0026820FD1AF
帧类型是IP数据报
IP数据报分析
version4
总长度: 60
生存时间:1
源IP地址:10:116:181:0
目的IP地址:211:138:121:109
此报文是ICMP报文
校验和:
19480
报文三:
以太网帧分析
目标硬件地址:FFFFFFFFFFFF
源硬件地址:6CC26B091170
帧类型是ARP数据报
源IP地址:10:116:177:133
目的IP地址:10:116:0:254IP数据报分析
version4
总长度: 0
生存时间:194
源IP地址:17:112:10:116
目的IP地址:177:133:0:0
此报文协议号为:C2
报文四:
以太网帧分析
目标硬件地址:0026820FD1AF
源硬件地址:3822D69DC48A
帧类型是IP数据报
IP数据报分析
version4
总长度: 52
生存时间:6
源IP地址:112:25:24:135
目的IP地址:10:116:181:0
此报文是TCP报文
源端口号:80
目的端口号:47548
确认号:17D4
窗口大小:5840
检验和:50627
紧急指针:0
报文五:
以太网帧分析
目标硬件地址:3822D69DC48A
源硬件地址:0026820FD1AF
帧类型是IP数据报
IP数据报分析
version4
总长度: 47
生存时间:6
源IP地址:10:116:181:0
目的IP地址:112:25:24:135
此报文是TCP报文
源端口号:47548
目的端口号:80
确认号:DC57
窗口大小:4380
检验和:59903
紧急指针:0
- 用Java读二进制报文、做报文分析软件
- 报文
- 报文
- 报文
- 报文!
- 用java发送http报文
- 8583报文详细分析
- SNMP报文分析
- DHCP报文分析
- RTP报文头部分析
- ICMP报文分析
- 8583报文详细分析
- DNS报文格式分析
- 8583报文详细分析
- ICMP报文分析
- ICMP报文分析
- ICMP报文分析
- 8583报文详细分析
- CGContextRef用法
- 2015年央视春节晚会广告价格
- window.open
- Android 中小细节
- 求N组数的最大公约数
- 用Java读二进制报文、做报文分析软件
- Centos6.5 编译安装PHP5.3.28
- 数字图像处理,经典滤波算法去噪对比实验(Matlab实现)
- 把树变成链表 Flatten Binary Tree to Linked List
- C# GeckoFX内核浏览器清空Cookie的方法
- 字节换算单位
- Windows下Linux 环境 Cygwin安装及配置 基本工具使用
- blkid
- maven+springMVC+mybatis+junit详细搭建过程