# Introduction

## Hello Pcap!

"Hello pcap!" implementation in different JVM languages.

{% tabs %}
{% tab title="Java" %}

```
var service = Service.Creator.create("PcapService");
try (var pcap = service.live(service.interfaces(), new DefaultLiveOptions())) {
  pcap.loop(10, (args, header, buffer) -> {
    System.out.println("Args     : " + args);
    System.out.println("Header   : " + header);
    System.out.println("Packet   : " + buffer);
  }, "Hello pcap!");
}
```

{% endtab %}

{% tab title="Kotlin" %}

```
val service = Service.Creator.create("PcapService")
val pcap = service.live(service.interfaces(), DefaultLiveOptions())
pcap.loop(10, { args, header, buffer ->
  println("Args     : $args")
  println("Header   : $header")
  println("Packet   : $buffer")
}, "Hello pcap!")
pcap.close()
```

{% endtab %}

{% tab title="Scala" %}

```
val service = Service.Creator.create("PcapService")
val pcap = service.live(service.interfaces(), new DefaultLiveOptions())
pcap.loop(10, (args: String, header: PacketHeader, buffer: PacketBuffer) => {
  println("Args     : ", args)
  println("Header   : ", header)
  println("Packet   : ", buffer)
}, "Hello pcap!")
pcap.close()
```

{% endtab %}

{% tab title="Groovy" %}

```
def service = Service.Creator.create("PcapService")
def pcap = service.live(service.interfaces(), new DefaultLiveOptions())
pcap.loop(10, { args, header, buffer ->
  println("Args     : " + args)
  println("Header   : " + header)
  println("Packet   : " + buffer)
}, "Hello pcap!");
pcap.close()
```

{% endtab %}

{% tab title="Clojure" %}

```
(def service (. Service$Creator (create "PcapService")))
(def pcap (.live service (.interfaces service) (DefaultLiveOptions.)))
(def handler (reify PacketHandler (gotPacket [this args header buffer]
  (println "Args     : " args)
  (println "Header   : " header)
  (println "Buffer    : " buffer))))
(.loop pcap 10 handler "Hello pcap!")
(.close pcap))
```

{% endtab %}

{% tab title="JRuby" %}

```
class Callback
  def gotPacket(args, header, buffer)
    puts "Args     : " + args
    puts "Header   : " + header.toString
    puts "Buffer    : " + buffer.toString
  end
end
service = Service::Creator.create('PcapService')
pcap = service.live(service.interfaces(), DefaultLiveOptions.new)
pcap.loop(10, Callback.new, "Hello pcap!")
pcap.close()
```

{% endtab %}

{% tab title="Jython" %}

```
class Callback(PacketHandler):
  def gotPacket(self, args, hdr, buf):
    print("Args     : ", args)
    print("Header   : ", hdr)
    print("Buffer    : ", buf)
service = DefaultService()
pcap = service.live(service.interfaces(), DefaultLiveOptions())
pcap.loop(10, Callback(), "Hello pcap!")
pcap.close()
```

{% endtab %}
{% endtabs %}

## Version History

Pcap is using semantic versioning: [https://semver.org](https://semver.org/)

| Version | Latest Version | Release Date | Latest Release |
| ------- | -------------- | ------------ | -------------- |
| 1.0.0   | 1.0.7          | 2020-12-24   | 2021-03-12     |
| 1.2.0   | 1.2.2          | 2021-02-01   | 2021-03-20     |
| 1.3.0   | 1.3.4          | 2021-05-02   | 2021-11-15     |
| 1.4.0   | 1.4.2          | 2021-12-25   | 2022-09-13     |

## Project Status

{% embed url="<https://github.com/users/ardikars/projects/1>" %}

## Supported platforms

* Linux (Tested)
* Mac OS (Tested)
* Windows (Tested)
* FreeBSD (Tested)
* Other OSes that supported by both Libpcap and JNA (Untested).

## Requirements

* Java 7+
* Libpcap for Unix or Npcap for Windows

## Java module system with java 9+

Pcap can be used in modular java 9+ applications with specific module name listed below:

* pcap-spi: pcap.spi
* pcap-jdk7: pcap.jdk7
* pcap-common: pcap.common
* pcap-codec: pcap.codec

{% hint style="warning" %}

## **Disclimers**

* Every types, methods, or fields annotated with @Incubating might be changed or removed at any time.
* Every types, methods, or fields annotated with @Incubating does not imply that the functionality being tested.
* Calling the @Restricted method might crash your app if you use it incorrectly. Make sure you know what you're doing with it.
  {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://pcap.ardikars.com/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
