📄 nsxsniffer.java
字号:
/*
* @(#)NSXSniffer.java
* 网络捕包器,NSXSniffer
*/
package com.tianxun.NEI.sniffer;
import com.tianxun.NEI.sniffer.util.JAbstractApp;
import java.io.File;
import java.util.Collections;
import java.util.Map;
import java.util.List;
import java.util.LinkedList;
import java.util.Timer;
import com.tianxun.NEI.sniffer.util.GscDiag;
import com.tianxun.NEI.sniffer.util.Logger;
/**
* @author 聂军
* @version 1.0 2004-9-10
*/
public class NSXSniffer extends JAbstractApp {
// 全局应用程序对象
private static NSXSniffer theApp = null;
// 缓冲原始数据包
private List snifferDatas;
// 原始数据包过滤器
private Filter filter;
// 调度发送UDP包的线程
private Timer timer = null;
// Sniffer数据解析器
private SnifferParser parser;
/**
* 构造器.
*/
public NSXSniffer() {
super("NSXSniffer");
loadConfig(".." + File.separator + "NSXSniffer.properties");
snifferDatas = Collections.synchronizedList(new LinkedList());
int logLevel = getConfigParam("logLevel",0);
GscDiag.initialize(".." + File.separator + "log", "Sniffer", logLevel);
}
/**
* 开始运行网络包的抓取, 并分析包.
*/
public void snifferRun() {
String name = getConfigParam("Filter.dir", "../filter");
filter = new SnifferFilter(name);
// 创建并启动获取网络数据包的线程
Thread reciveSniffer = new SnifferReceiver(snifferDatas);
reciveSniffer.start();
parser = new SnifferParser(snifferDatas);
String priority = getConfigParam("Parse.thread.priority", "norm");
if (priority.equalsIgnoreCase("max")) {
parser.setPriority(Thread.MAX_PRIORITY);
}
parser.start();
timer = new Timer();
int interval = getConfigParam("Send.flow.interval.time", 30000);
timer.schedule(new SnifferSender(), interval, interval);
}
/**
* 得到包过滤器.
*
* @return Filter.
*/
public Filter getFilter() {
return filter;
}
/**
* @return 全局应用程序对象.
*/
public static NSXSniffer getApp() {
return theApp;
}
/**
* 得到当前解析器使用的有效记录缓冲区.
*
* @return Map.
*/
public Map getCurrentValidBuffer() {
return parser.getCurrentValidBuffer();
}
/**
* 运行起点.
*
* @param args - 命令行参数.
*/
public static void main(String[] args) {
System.out.println(
"****************准备启动NSXSniffer****************\n");
theApp = new NSXSniffer();
// 获取动态连接库的位置
String lib = getConfigParam("JSniffer.dll.position", "JSniffer");
String[] libs = {lib};
JSniffer.loadLibrary(libs);
// 设置网卡为混杂模式, 并初始化抓包条件
int port = getConfigParam("Netcard.raw.mode.port", 56734);
if (!JSniffer.initSniffer(port)) {
System.out.println(
"****************NSXSniffer启动失败****************\n");
getLogger().log(getLevel(0), "Init Sniffer Failed!");
System.exit(0);
}
theApp.snifferRun();
GscDiag.log(0, "begin sniffer");
System.out.println(
" ......正在捕捉网络数据包......\n");
System.out.println(
"****************NSXSniffer启动成功****************\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -