node-red-contrib-pcap
Version:
Network packet capture for Node-RED
97 lines (62 loc) • 3.56 kB
Markdown
node-red-contrib-pcap
=====================
The *node-red-contrib-pcap* adds support to [Node-RED] for capture and decoding network packets using [libpcap].

Installation
------------
You need to have [libpcap] installed on your system before you can install this module.
On Debian and Ubuntu:
apt-get install libpcap-dev
On MacOS X, using [Homebrew]:
brew install libpcap
Then change to your node-red installation directory and then run:
npm install node-red-contrib-pcap
You will then be able to see the new _pcap_ node type added to Node-RED's pallet on the left, in the _network_ category.
Configuration
-------------
A single *Interface* can be chosen for each node instance.
The list shows the network interfaces and MAC address of the
interfaces on the Node-RED host system.
There are three different *Output* options:
* Raw Network packet - outputs a Buffer object containing the binary packet.
* Decoded pcap objects - the [pcap npm package] contains a set of packet decoder objects.
* String - converts the decoded packet objects to string representation. Use the *path* setting below to choose specific fields.
The *Filter* setting can be used to filter the network packets received
before they get to Node-RED. The syntax is the same as tcpdump/libpcap/wireshark.
See the [pcap-filter(7)] man page for details of this syntax.
The *Path* setting is only used for the String/Decoded packet outputs. It allows you
you choose a sub-property of packet, rather than outputting the whole packet.
The structure is based on the [decode objects] within the pcap package. This can be slightly tricky to work out, the documentation
recommends exploring the structure using ```sys.inspect``` - in Node-RED this can be
done using the _debug_ node.
Call ```.payload``` repeatedly to get to higher level protocol headers.
#### Path Examples
* ```pcap_header.tv_sec``` the time the packet was recieved
* ```payload.shost``` the Layer 2 MAC address of the source of the packet
* ```payload.dhost``` the Layer 2 MAC address of the destination of the packet
* ```payload.ethertype``` the Layer 2 Ethernet packet type identifier
* ```payload.payload.saddr``` the source IP address of the packet
* ```payload.payload.daddr``` the destination IP address of the packet
_If you have any other configuration tips for other users, please submit a Pull Request for this README._
Capturing ARP packets
---------------------
I originally wrote this Node-RED node in order to receive notifications when I press my
[Amazon Dash] wifi button. These buttons, intended for ordering things from Amazon,
send out ARP and DHCP packets to the whole network when they are pressed.
These are the settings I use on my Raspberry Pi to detect devices appearing on the network:
* Interface: ```eth0```
* Output: ```String```
* Filter: ```arp```
* Path: ```payload.shost```
* Name: ```Capture ARP on eth0```
These are the same as the screenshot shown above.
Copyright and license
---------------------
Copyright 2016 Nicholas Humfrey under [the Apache 2.0 license](LICENSE).
[Node-RED]: http://nodered.org/
[Homebrew]: http://brew.sh/
[libpcap]: http://www.tcpdump.org/
[decode objects]: http://github.com/mranney/node_pcap/tree/master/decode
[pcap-filter(7)]: http://www.tcpdump.org/manpages/pcap-filter.7.html
[pcap npm package]: https://www.npmjs.com/package/pcap
[Amazon Dash]: http://www.amazon.com/oc/dash-button