📄 frmmain.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 + -