⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmain.java

📁 用来分析报文
💻 JAVA
字号:
/*
 * FrmMain.java
 *
 * Created on 2008年10月27日, 下午10:46
 */
package IpAnalyze;

public class FrmMain extends javax.swing.JFrame {

	String oMessage = "45 00 00 3B 11 EE 40 00 80 06 BE 34 CA C1 4A 85 CA C1 4A 92";
	java.lang.StringBuilder oResult = null;
	java.util.Hashtable<String, Integer> oHexHash;
	java.util.Hashtable<Integer, String> oProtocolHash;

	/** Creates new form FrmMain */
	public FrmMain() {
		initComponents();

		this.txtContent.setText(oMessage);

		this.oHexHash = new java.util.Hashtable<String, Integer>();
		this.oHexHash.put("0", 0);
		this.oHexHash.put("1", 1);
		this.oHexHash.put("2", 2);
		this.oHexHash.put("3", 3);
		this.oHexHash.put("4", 4);
		this.oHexHash.put("5", 5);
		this.oHexHash.put("6", 6);
		this.oHexHash.put("7", 7);
		this.oHexHash.put("8", 8);
		this.oHexHash.put("9", 9);
		this.oHexHash.put("A", 10);
		this.oHexHash.put("B", 11);
		this.oHexHash.put("C", 12);
		this.oHexHash.put("D", 13);
		this.oHexHash.put("E", 14);
		this.oHexHash.put("F", 15);

		this.oProtocolHash = new java.util.Hashtable<Integer, String>();
		this.oProtocolHash.put(1, "ICMP");
		this.oProtocolHash.put(2, "IGMP");
		this.oProtocolHash.put(6, "TCP");
		this.oProtocolHash.put(17, "UDP");
		this.oProtocolHash.put(50, "ESP(IPSec)");
		this.oProtocolHash.put(51, "AH(IPSec)");
		this.oProtocolHash.put(89, "OSPF");
	}

	private void initComponents() {

		jPanel3 = new javax.swing.JPanel();
		btnTranslate = new javax.swing.JButton();
		jPanel2 = new javax.swing.JPanel();
		jLabel1 = new javax.swing.JLabel();
		jScrollPane1 = new javax.swing.JScrollPane();
		txtContent = new javax.swing.JTextArea();
		jPanel1 = new javax.swing.JPanel();
		jScrollPane2 = new javax.swing.JScrollPane();
		txtResult = new javax.swing.JTextArea();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		setTitle("简单报文分析器");

		jPanel3.setPreferredSize(new java.awt.Dimension(100, 35));
		jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));

		btnTranslate.setText("Translate");
		btnTranslate.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				btnTranslateActionPerformed(evt);
			}
		});
		jPanel3.add(btnTranslate);

		getContentPane().add(jPanel3, java.awt.BorderLayout.SOUTH);

		jPanel2.setLayout(new java.awt.BorderLayout());

		jLabel1.setText("报文:");
		jPanel2.add(jLabel1, java.awt.BorderLayout.WEST);

		txtContent.setColumns(20);
		txtContent.setRows(5);
		jScrollPane1.setViewportView(txtContent);

		jPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER);

		getContentPane().add(jPanel2, java.awt.BorderLayout.NORTH);

		jPanel1.setLayout(new java.awt.BorderLayout());

		txtResult.setColumns(20);
		txtResult.setEditable(false);
		txtResult.setRows(5);
		jScrollPane2.setViewportView(txtResult);

		jPanel1.add(jScrollPane2, java.awt.BorderLayout.CENTER);

		getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

		java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit()
				.getScreenSize();
		setBounds((screenSize.width - 408) / 2, (screenSize.height - 340) / 2,
				408, 340);
	}

	private void btnTranslateActionPerformed(java.awt.event.ActionEvent evt) {
		if (this.txtContent.getText().length() == 0) {
			javax.swing.JOptionPane.showMessageDialog(this, "报文不能为空!");
			return;
		}
		String[] subMessages = this.txtContent.getText().trim().split(" ");
		if (subMessages.length < 20) {
			javax.swing.JOptionPane.showMessageDialog(this, "报文格式错误!");
			return;
		}
		String len = "";
		int val1, val2, sum;
		try {
			this.oResult = new java.lang.StringBuilder();
			// 4位版本:表示目前的协议版本号,数值是4表示版本为4,因此IP有时也称作IPv4;
			this.oResult.append(String.format("协议版本(Version):%1$s\n",
					subMessages[0].substring(0, 1)));

			// 4位首部长度:头部的是长度,它的单位是32位(4个字节),数值为5表示IP头部长度为20字节。
			this.oResult
					.append(String.format(
							"首部长度(Header length):%1$s (%2$s bytes)\n",
							subMessages[0].substring(1, 2), Integer
									.parseInt(subMessages[0].substring(0, 1))
									* Integer.parseInt(subMessages[0]
											.substring(1, 2))));

			// 8位服务类型(TOS)
			this.oResult.append(String.format(
					"服务类型(Type of service(TOS)):%1$s\n", subMessages[1]));

			// 16位总长度(字节数):总长度字段是指整个IP数据报的长度,以字节为单位。
			len = subMessages[2] + subMessages[3];
			sum = 0;
			for (int i = 0; i < len.length(); i++) {
				val1 = this.oHexHash.get(len.substring(i, i + 1));
				val2 = (int) (val1 * Math.pow(16.0, len.length() - (i + 1)));
				sum = sum + val2;
			}
			this.oResult.append(String.format("总长度(Total length):%1$s bytes\n",
					Integer.toString(sum)));

			// 16位标识:标识字段唯一地标识主机发送的每一份数据报。
			len = subMessages[4] + subMessages[5];
			sum = 0;
			for (int i = 0; i < len.length(); i++) {
				val1 = this.oHexHash.get(len.substring(i, i + 1));
				val2 = (int) (val1 * Math.pow(16.0, len.length() - (i + 1)));
				sum = sum + val2;
			}
			this.oResult.append(String.format("标识(Identification):%1$s\n",
					Integer.toString(sum)));

			// 8位生存时间(TTL)
			len = subMessages[8];
			sum = 0;
			for (int i = 0; i < len.length(); i++) {
				val1 = this.oHexHash.get(len.substring(i, i + 1));
				val2 = (int) (val1 * Math.pow(16.0, len.length() - (i + 1)));
				sum = sum + val2;
			}
			this.oResult.append(String.format("生存时间(TTL):%1$s hops\n", Integer
					.toString(sum)));

			// 8位协议:表示协议类型。
			len = subMessages[9];
			sum = 0;
			for (int i = 0; i < len.length(); i++) {
				val1 = this.oHexHash.get(len.substring(i, i + 1));
				val2 = (int) (val1 * Math.pow(16.0, len.length() - (i + 1)));
				sum = sum + val2;
			}
			this.oResult.append(String.format("协议(Protocol):%1$s %2$s\n",
					Integer.toString(sum), this.oProtocolHash.get(sum)));

			// 16位首部检验和:当收到一份I P数据报后,同样对首部中每个16 位进行二进制反码的求和。
			this.oResult.append(String.format("首部检验和(Checksum):0x%1$s%2$s\n",
					subMessages[10], subMessages[11]));

			// 32位源IP地址
			this.oResult.append("源IP地址(Source IP Address):");
			for (int j = 12; j <= 15; j++) {
				len = subMessages[j];
				sum = 0;
				for (int i = 0; i < len.length(); i++) {
					val1 = this.oHexHash.get(len.substring(i, i + 1));
					val2 = (int) (val1 * Math.pow(16.0, len.length() - (i + 1)));
					sum = sum + val2;
				}
				this.oResult.append(Integer.toString(sum)
						+ (j == 15 ? "\n" : "."));
			}

			// 32位目的IP地址
			this.oResult.append("目的IP地址(Destination IP Address):");
			for (int j = 16; j <= 19; j++) {
				len = subMessages[j];
				sum = 0;
				for (int i = 0; i < len.length(); i++) {
					val1 = this.oHexHash.get(len.substring(i, i + 1));
					val2 = (int) (val1 * Math.pow(16.0, len.length() - (i + 1)));
					sum = sum + val2;
				}
				this.oResult.append(Integer.toString(sum)
						+ (j == 19 ? "\n" : "."));
			}
			this.txtResult.setText(this.oResult.toString());
		} catch (Exception ex) {
			javax.swing.JOptionPane.showMessageDialog(this, ex.getMessage());
		}
	}

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String args[]) {
		java.awt.EventQueue.invokeLater(new Runnable() {

			public void run() {
				new FrmMain().setVisible(true);
			}
		});
	}

	// Variables declaration - do not modify
	private javax.swing.JButton btnTranslate;
	private javax.swing.JLabel jLabel1;
	private javax.swing.JPanel jPanel1;
	private javax.swing.JPanel jPanel2;
	private javax.swing.JPanel jPanel3;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JScrollPane jScrollPane2;
	private javax.swing.JTextArea txtContent;
	private javax.swing.JTextArea txtResult;
	// End of variables declaration
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -