?? jmain.java
字號:
package cn.myownlife.www;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import jpcap.packet.ARPPacket;
import jpcap.packet.ICMPPacket;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
import jpcap.packet.TCPPacket;
import jpcap.packet.UDPPacket;
public class Jmain extends javax.swing.JFrame implements ActionListener{
//定義各個組建常量,變量
private JMenuItem exitMenuItem;
private JSeparator jSeparator2;
private JMenuItem saveMenuItem;
private JMenuItem getItem;
private JMenuItem stopMenuItem;
private JMenuItem startMenuItem;
private JMenu Menu;
private JMenuBar jMenuBar1;
static String []sql = new String[1000];// 保存每次抓到的包的INSERT語句
int n=0;//抓到的包數
JTable tabledisplay = null;
Vector rows,columns;
DefaultTableModel tabModel;
JScrollPane scrollPane;
JLabel statusLabel;
Captor captor = new Captor();
/*構造主函數*/
public static void main(String[]arg){
Jmain in = new Jmain();
in.setVisible(true);
}
/*初始化*/
public Jmain() {
super();
initGUI();
}
/*初始化圖形界面*/
private void initGUI() {
setSize(400, 300);
{
jMenuBar1 = new JMenuBar();//初始化菜單
setJMenuBar(jMenuBar1);
{
Menu = new JMenu();
jMenuBar1.add(Menu);
Menu.setText("\u6293\u5305");
Menu.setPreferredSize(new java.awt.Dimension(35, 21));
{
startMenuItem = new JMenuItem();
Menu.add(startMenuItem);
startMenuItem.setText("開始");
startMenuItem.setActionCommand("start");
startMenuItem.addActionListener(this);//添加監聽器
}
{
stopMenuItem = new JMenuItem();
Menu.add(stopMenuItem);
stopMenuItem.setText("停止");
stopMenuItem.setActionCommand("stop");
stopMenuItem.addActionListener(this);
}
{
saveMenuItem = new JMenuItem();
Menu.add(saveMenuItem);
saveMenuItem.setText("保存");
saveMenuItem.setActionCommand("save");
saveMenuItem.addActionListener(this);
}
{
getItem = new JMenuItem();
Menu.add(getItem);
getItem.setText("讀取日志");
getItem.setActionCommand("get");
getItem.addActionListener(this);
}
{
jSeparator2 = new JSeparator();
Menu.add(jSeparator2);
}
{
exitMenuItem = new JMenuItem();
Menu.add(exitMenuItem);
exitMenuItem.setText("Exit");
exitMenuItem.setActionCommand("exit");
exitMenuItem.addActionListener(this);
}
}
}
rows=new Vector();//構造vector
columns= new Vector();
//把各個屬性添加到Jtable
columns.addElement("包類型");
columns.addElement("數據報時間");
columns.addElement("源IP地址");
columns.addElement("目的IP地址");
columns.addElement("首部長度");
columns.addElement("數據長度");
columns.addElement("是否分段");
columns.addElement("分段偏移量");
columns.addElement("首部內容");
columns.addElement("數據內容");
tabModel=new DefaultTableModel();
tabModel.setDataVector(rows,columns);
tabledisplay = new JTable( tabModel );
scrollPane= new JScrollPane(tabledisplay);
this.getContentPane().add( new JScrollPane(tabledisplay),BorderLayout.CENTER);
statusLabel=new JLabel("作者 : lsupper; 更多信息請到 : http://www.myownlife.cn/");
this.getContentPane().add(statusLabel,BorderLayout.SOUTH);
}
/*為各個命令進行處理*/
public void actionPerformed(ActionEvent event) {
String cmd=event.getActionCommand();
if(cmd.equals("start")){
try {//異常處理
captor.capturePacketsFromDevice();//開始抓包
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
captor.setJFrame(this);
}
else if(cmd.equals("stop")){ // 停止抓包
captor.stopCapture();
}
else if(cmd.equalsIgnoreCase("save")) {
Save s = new Save();
try {
alert a = new alert();
boolean b = s.Saveit(sql,n);
if(b){
a.alerttrue();//保存成功調用alerttrue
}else {
a.alertfalse();//失敗調用alertfalse
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(cmd.equals("get")) { //讀取保存到數據庫中的數據
try {
LinkDB l = new LinkDB();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(cmd.equals("exit")){ //退出
System.exit(0);
}
}
/*處理數據報*/
public void dealPacket( Packet packet )
{
try
{
Vector r=new Vector();
String strtmp,strtmp2;
//timestamp數據報的時間
Timestamp timestamp = new Timestamp((packet.sec * 1000) + (packet.usec / 1000));
String temp = ((IPPacket)packet).dont_frag == true ? "yes" : "no";
//把數據報的各個字段的內容添加到VECTOR中
r.addElement(gettype(packet)); //包類型
r.addElement(timestamp.toString()); //數據報時間
r.addElement(((IPPacket)packet).src_ip.toString()); //源IP地址
r.addElement(((IPPacket)packet).dst_ip.toString()); //目的IP地址
r.addElement( packet.header.length ); //首部長度
r.addElement( packet.data.length ); //數據長度
r.addElement(temp); //是否不分段
r.addElement( ((IPPacket)packet).offset ); //數據長度
strtmp = "";
for(int i=0;i<packet.header.length;i++){
strtmp += Byte.toString(packet.header[i]);
}
r.addElement(strtmp); //首部內容
strtmp2 = "";
for(int i=0;i<packet.data.length;i++){
strtmp2 += Byte.toString(packet.data[i]);
}
r.addElement(strtmp2); //數據內容
//由數據包各個字段組成SQL語句
//把SQL語句存入SQL數組中
sql[n] ="INSERT INTO packets VALUES ('"
+gettype(packet)+"','"
+timestamp.toString()+"','"
+((IPPacket)packet).src_ip.toString()+"','"
+((IPPacket)packet).dst_ip.toString()+"',"
+packet.header.length+","
+packet.data.length+",'"
+temp+"',"
+((IPPacket)packet).offset+",'"
+strtmp+"','"
+strtmp2+"'"
+");";
rows.addElement(r);
tabledisplay.addNotify();
n++;
}
catch( Exception e) {
}
}
/*返回抓到的包的類型*/
public String gettype(Packet p) {
String type = "other";
if(p instanceof ARPPacket){ //是否是ARP包
type="ARP";
}else if(p instanceof IPPacket) { //是否是IP包
if((IPPacket)p instanceof TCPPacket){ //是否是TCP包
type="TCP";
}else if(p instanceof UDPPacket){ //是否是UDP包
type="UDP";
}else if(p instanceof ICMPPacket){ //是否是ICMP包
type="ICMP";
}
}
return type;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -