标签: jpcap

通过一次单击在mac os x上运行具有root权限的jar

我用jpcap实现了一个小的java sniffer-tool .到目前为止它的运行正常,但它需要root权限才能访问网络设备.如果我将项目导出到可运行的jar,我可以通过sudo在终端中使用它来运行它:

$ sudo java -jar littleSniffer.jar 
Run Code Online (Sandbox Code Playgroud)

有没有人知道"一键" - 解决方案来运行我的具有root权限的runnable jar.我想把这个工具交给我的同事们,我很高兴他们可以在不使用终端的情况下启动它.也许通过使用automator应用程序?

jar root jpcap

8
推荐指数
1
解决办法
5437
查看次数

安卓上的跟踪路由

我是 android 平台的初学者,我想构建一个跟踪路由应用程序。所以这些是我的查询:

  1. 是否可以在 Android 中制作这样的应用程序?如果可能,请指导我遵循的方式。

  2. Android 是否支持底层编程来捕获 ICMP 数据包?或者我是否需要添加某种 JAR(在 Java 中)或其他一些库来支持这个应用程序?

  3. 在 Java 中,我们可以在 IDE 或 Eclipse 中导入 JPCAP 和 docjar 等类型的库,以便 Java 支持制作此类 API?

我需要宝贵的建议。

android traceroute jpcap

6
推荐指数
1
解决办法
2万
查看次数

我可以运行使用32位jdk和64位jre开发的java程序吗?应用程序使用32位非Java系统库

我正在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位版本.

java 64-bit jpcap

6
推荐指数
1
解决办法
1万
查看次数

线程"main"中的异常java.lang.UnsatisfiedLinkError:java.library.path中没有jpcap

我正在使用netbeans ide并尝试使用jpcap库捕获数据包.我的程序在突然出现此错误之前曾经正常运行

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jpcap in java.library.path
Run Code Online (Sandbox Code Playgroud)

正在出现.我已经在我的另一台计算机上尝试过ds但是徒劳无功..我已经添加了jpcap库并且在安装之前我完全清除了旧版本.已经完成了所有可用的事情.我遇到了麻烦

请帮忙!

java netbeans jpcap

6
推荐指数
1
解决办法
1万
查看次数

使用jPcap在Java中实时进行TCP会话重建

我正在侦听特定的网卡并使用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)

java networking tcp jpcap

5
推荐指数
1
解决办法
1198
查看次数

从 jpcap 设备路径获取接口名称/地址(或将 NetworkInterface 映射到)

我正在尝试执行以下操作:

  1. 向用户显示人类可读的网络接口名称及其 IP 地址的列表。
  2. 在用户选择的接口上启动 jpcap 数据包捕获。

然而,以下几点给我带来了麻烦:

  • jpcap 仅提供PacketCapture.lookupDevices(),它返回到接口的 Windows NPF 驱动程序设备路径列表(例如\Device\NPF_{39966C4C-3728-4368-AE92-1D36ACAF6634})和相当平淡的显示字符串(例如Microsoft),并且没有其他信息。所以我不能用它来构造UI界面列表。
  • NetworkInterface.getNetworkInterfaces()提供系统上的接口列表,其中包含 UI 所需的所有信息,但NetworkInterface不提供 NDF 驱动程序设备路径,仅提供显示名称和设备名称,例如“net5”、“lo”等。
  • jpcapPacketCapture#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 设备路径,并使用此处的技术之一 …

java windows windows-7 jpcap

5
推荐指数
1
解决办法
3442
查看次数

使用jpcap获取完整的TCP数据包数据

我使用了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)

java sniffer pcap packet-sniffers jpcap

1
推荐指数
1
解决办法
4146
查看次数