我用jpcap实现了一个小的java sniffer-tool .到目前为止它的运行正常,但它需要root权限才能访问网络设备.如果我将项目导出到可运行的jar,我可以通过sudo在终端中使用它来运行它:
$ sudo java -jar littleSniffer.jar
Run Code Online (Sandbox Code Playgroud)
有没有人知道"一键" - 解决方案来运行我的具有root权限的runnable jar.我想把这个工具交给我的同事们,我很高兴他们可以在不使用终端的情况下启动它.也许通过使用automator应用程序?
我是 android 平台的初学者,我想构建一个跟踪路由应用程序。所以这些是我的查询:
是否可以在 Android 中制作这样的应用程序?如果可能,请指导我遵循的方式。
Android 是否支持底层编程来捕获 ICMP 数据包?或者我是否需要添加某种 JAR(在 Java 中)或其他一些库来支持这个应用程序?
在 Java 中,我们可以在 IDE 或 Eclipse 中导入 JPCAP 和 docjar 等类型的库,以便 Java 支持制作此类 API?
我需要宝贵的建议。
我正在64位Windows 7安装上使用64位eclipse开发一个java应用程序.我被迫使用32位JDK(1.7.0),因为应用程序使用Jpcap,它不会使用64位JDK编译.
应用程序必须跨32位和64位系统跨平台,这通常是使用任何JDK开发的Java应用程序的情况.但我相信这种情况有点复杂,因为除了jar之外,Jpcap还会安装系统库(.dll/.so),后者又是WinPcap和libpcap的包装器.因此,Jpcap调用是对这些库的一系列嵌套调用.
这是问题:
应用程序可执行文件是否可在64位平台上运行 假设用户将安装所需的x86库(jpcap.dll/.so,WinPcap,libpcap),因为Windows库不存在64位版本.
我正在使用netbeans ide并尝试使用jpcap库捕获数据包.我的程序在突然出现此错误之前曾经正常运行
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jpcap in java.library.path
Run Code Online (Sandbox Code Playgroud)
正在出现.我已经在我的另一台计算机上尝试过ds但是徒劳无功..我已经添加了jpcap库并且在安装之前我完全清除了旧版本.已经完成了所有可用的事情.我遇到了麻烦
请帮忙!
我正在侦听特定的网卡并使用jPcap库捕获TCP(仅TCP)数据包.但是,我需要拥有整个TCP会话,而不是单个数据包.
在Wireshark中,我可以选择"关注tcp流",这样我就可以从头到尾完成整个对话.我想在Java中做到这一点.如何实时重建这些数据包?我想在侦听网卡和捕获新数据包的同时重建TCP会话.我怎样才能做到这一点?这是我捕获数据包的代码:
jpcap.NetworkInterface[] devices = JpcapCaptor.getDeviceList();
JpcapCaptor captor = JpcapCaptor.openDevice(devices[1], 65535, true, 1000);
JpcapWriter writer = JpcapWriter.openDumpFile(captor, "myNetworkDump");
captor.loopPacket(-1, new PacketPrinter(writer));
Run Code Online (Sandbox Code Playgroud)
class PacketPrinter implements PacketReceiver {
private HashMap<Long, ArrayList<Packet>> sessions;
private BufferedWriter out;
private JpcapWriter writer;
Map<Long, TCPBodyData> bodies = new HashMap<Long, TCPBodyData>();
public PacketPrinter(JpcapWriter writer) {
this.writer = writer;
this.sessions = new HashMap<Long, ArrayList<Packet>>();
}
public void receivePacket(Packet packet) {
System.out.println(packet);
if (packet instanceof TCPPacket) {
TCPPacket tcppacl = (TCPPacket) packet;
byte[] body = addBodyData(tcppacl);
// System.out.println(new String(body));
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行以下操作:
然而,以下几点给我带来了麻烦:
PacketCapture.lookupDevices(),它返回到接口的 Windows NPF 驱动程序设备路径列表(例如\Device\NPF_{39966C4C-3728-4368-AE92-1D36ACAF6634})和相当平淡的显示字符串(例如Microsoft),并且没有其他信息。所以我不能用它来构造UI界面列表。NetworkInterface.getNetworkInterfaces()提供系统上的接口列表,其中包含 UI 所需的所有信息,但NetworkInterface不提供 NDF 驱动程序设备路径,仅提供显示名称和设备名称,例如“net5”、“lo”等。PacketCapture#open()只接受设备路径。既已启动又未环回的设备列表NetworkInterface确实与 jpcap 返回的设备列表相对应,尽管它们的顺序不同。
因此,我找不到任何NetworkInterface可以传递给 的内容PacketCapture#open(),并且我不知道如何从 . 返回的设备路径中获取适合 UI 的信息PacketCapture#lookupDevices()。PacketCapture不接受NetworkInterface#getName()。因此,我被困住了。
我还没有在 Linux 上尝试过这个。我怀疑这个问题是 Windows 特有的,它NetworkInterface#getName()与PacketCapture#open().
我如何获取 jpcap 打开设备所需的信息NetworkInterface(或相反 - 获取NetworkInterface给定的设备路径),或者是否有另一种方法可以让我获得一个好的显示名称和 IP 地址每个设备都直接来自 jpcap?
Windows 注册表:我一直在进行一些挖掘,至少在注册表中找到了有关 NPF 设备的信息。给定 jpcap 设备路径,并使用此处的技术之一 …
我使用了jpcap教程中的一个简单程序.我想在端口4444上侦听我的其他客户端 - 服务器应用程序.我遇到了一个问题:方法TCPPacket.getTCPData()返回byte []数组,限制为30个元素.我知道数据包包含超过30个字节的有用数据,不包括TCP头字节.
如何获取超过30个字节的数据包数据?
我查了一下,方法tcpPacket.getPayloadDataLength()返回超过500,而TCPPacket.getTCPData()返回一个30字节的数组......为什么只有30?
代码在这里
public class Test {
public static void main(String[] args) {
try {
Test test = new Test(PacketCapture.lookupDevices()[5].trim().split("\\s")[0]);
} catch(Exception e) {
e.printStackTrace();
}
}
public Test(String device) throws Exception {
// Initialize jpcap
PacketCapture pcap = new PacketCapture();
System.out.println("Using device '" + device + "'");
pcap.open(device, true);
pcap.setFilter("port 4444", true);
pcap.addPacketListener(new PacketHandler());
System.out.println("Capturing packets...");
pcap.capture(-1); // -1 is infinite capturing
}
}
class PacketHandler implements PacketListener {
BufferedOutputStream stream;
public PacketHandler() throws IOException …Run Code Online (Sandbox Code Playgroud)