232 lines
8.1 KiB
ReStructuredText
232 lines
8.1 KiB
ReStructuredText
.. zephyr:code-sample:: net-capture
|
|
:name: Network packet capture
|
|
:relevant-api: net_capture
|
|
|
|
Capture network packets and send them to a remote host via IPIP tunnel.
|
|
|
|
Overview
|
|
********
|
|
|
|
This application will setup the device so that net-shell can be used
|
|
to enable network packet capture.
|
|
|
|
The captured packets are sent to
|
|
remote host via IPIP tunnel. The tunnel can be configured to be in the
|
|
same connection as what we are capturing packets or it can be a separate
|
|
bearer. For example if you are capturing network traffic for interface 1,
|
|
then the remote host where the captured packets are sent can also be reached
|
|
via interface 1 or via some other network interface if the device has
|
|
multiple network interfaces connected.
|
|
|
|
Requirements
|
|
************
|
|
|
|
- :ref:`networking_with_host`
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
Build the sample application like this:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/net/capture
|
|
:board: <board to use>
|
|
:conf: <config file to use>
|
|
:goals: build
|
|
:compact:
|
|
|
|
|
|
Network Configuration
|
|
*********************
|
|
|
|
The ``net-tools`` project contains ``net-setup.sh`` script that can be used to setup
|
|
the tunneling.
|
|
|
|
In terminal #1, type:
|
|
|
|
.. code-block:: console
|
|
|
|
./net-setup.sh -c zeth-tunnel.conf
|
|
|
|
The script will create following network interfaces:
|
|
|
|
.. code-block:: console
|
|
|
|
zeth: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
|
|
inet 192.0.2.2 netmask 255.255.255.255 broadcast 0.0.0.0
|
|
inet6 2001:db8::2 prefixlen 128 scopeid 0x0<global>
|
|
ether 00:00:5e:00:53:ff txqueuelen 1000 (Ethernet)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
|
|
zeth-ip6ip: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1480
|
|
inet6 2001:db8:200::2 prefixlen 64 scopeid 0x0<global>
|
|
inet6 fe80::c000:202 prefixlen 64 scopeid 0x20<link>
|
|
sit txqueuelen 1000 (IPv6-in-IPv4)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
|
|
zeth-ip6ip6: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1452
|
|
inet6 fe80::486c:eeff:fead:5d11 prefixlen 64 scopeid 0x20<link>
|
|
inet6 2001:db8:100::2 prefixlen 64 scopeid 0x0<global>
|
|
unspec 20-01-0D-B8-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 8 dropped 8 overruns 0 carrier 8 collisions 0
|
|
|
|
zeth-ipip: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1480
|
|
inet 198.51.100.2 netmask 255.255.255.0 destination 198.51.100.2
|
|
inet6 fe80::5efe:c000:202 prefixlen 64 scopeid 0x20<link>
|
|
tunnel txqueuelen 1000 (IPIP Tunnel)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 7 dropped 0 overruns 0 carrier 0 collisions 0
|
|
|
|
zeth-ipip6: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1452
|
|
inet 203.0.113.2 netmask 255.255.255.0 destination 203.0.113.2
|
|
inet6 fe80::387b:a6ff:fe56:6cac prefixlen 64 scopeid 0x20<link>
|
|
unspec 20-01-0D-B8-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 7 dropped 7 overruns 0 carrier 0 collisions 0
|
|
|
|
The ``zeth`` is the outer tunnel interface, all the packets go via it.
|
|
The other interfaces receive packets depending on the configuration you have
|
|
in the Zephyr side.
|
|
|
|
Network Capture Configuration
|
|
=============================
|
|
|
|
In Zephyr console, type:
|
|
|
|
.. code-block:: console
|
|
|
|
uart:~$ net iface
|
|
|
|
Interface 0x807df74 (Virtual) [1]
|
|
=================================
|
|
Interface is down.
|
|
|
|
Interface 0x807e040 (Ethernet) [2]
|
|
==================================
|
|
Link addr : 02:00:5E:00:53:3B
|
|
MTU : 1452
|
|
Flags : AUTO_START,IPv4,IPv6
|
|
Ethernet capabilities supported:
|
|
IPv6 unicast addresses (max 4):
|
|
fe80::5eff:fe00:533b autoconf preferred infinite
|
|
2001:db8::1 manual preferred infinite
|
|
IPv6 multicast addresses (max 4):
|
|
ff02::1
|
|
ff02::1:ff00:533b
|
|
ff02::1:ff00:1
|
|
IPv6 prefixes (max 2):
|
|
<none>
|
|
IPv6 hop limit : 64
|
|
IPv6 base reachable time : 30000
|
|
IPv6 reachable time : 43300
|
|
IPv6 retransmit timer : 0
|
|
IPv4 unicast addresses (max 2):
|
|
192.0.2.1 manual preferred infinite
|
|
IPv4 multicast addresses (max 1):
|
|
<none>
|
|
IPv4 gateway : 0.0.0.0
|
|
IPv4 netmask : 255.255.255.0
|
|
|
|
Next the monitoring is setup so that captured packets are sent as a payload
|
|
in IPv6/UDP packets.
|
|
|
|
.. code-block:: console
|
|
|
|
uart:~$ net capture setup 192.0.2.2 2001:db8:200::1 2001:db8:200::2
|
|
Capture setup done, next enable it by "net capture enable <idx>"
|
|
|
|
The ``net capture`` command will show current configuration. As we have not
|
|
yet enabled capturing, the interface is not yet set.
|
|
|
|
.. code-block:: console
|
|
|
|
uart:~$ net capture
|
|
Network packet capture disabled
|
|
Capture Tunnel
|
|
Device iface iface Local Peer
|
|
NET_CAPTURE0 - 1 [2001:db8:200::1]:4242 [2001:db8:200::2]:4242
|
|
|
|
Next enable network packet capturing for interface 2.
|
|
|
|
.. code-block:: console
|
|
|
|
uart:~$ net capture enable 2
|
|
|
|
The tunneling interface will be UP and the captured packets will be sent to
|
|
peer host.
|
|
|
|
.. code-block:: console
|
|
|
|
uart:~$ net iface 1
|
|
|
|
Interface 0x807df74 (Virtual) [1]
|
|
=================================
|
|
Name : IPv4 tunnel
|
|
Attached : 2 (Ethernet / 0x807e040)
|
|
Link addr : 8E:F9:94:6D:B9:E6
|
|
MTU : 1452
|
|
Flags : POINTOPOINT,NO_AUTO_START,IPv6
|
|
IPv6 unicast addresses (max 4):
|
|
fe80::aee6:fbff:fe50:28c0 autoconf preferred infinite
|
|
2001:db8:200::1 manual preferred infinite
|
|
IPv6 multicast addresses (max 4):
|
|
<none>
|
|
IPv6 prefixes (max 2):
|
|
<none>
|
|
IPv6 hop limit : 64
|
|
IPv6 base reachable time : 30000
|
|
IPv6 reachable time : 22624
|
|
IPv6 retransmit timer : 0
|
|
IPv4 not enabled for this interface.
|
|
|
|
If you now do this:
|
|
|
|
.. code-block:: console
|
|
|
|
uart:~$ net ping -c 1 192.0.2.2
|
|
|
|
You should see a ICMPv4 message sent to ``192.0.2.2`` and also the captured
|
|
packet will be sent to ``192.0.2.2`` in tunnel to ``2001:db8:200::2``
|
|
address. The UDP port is by default ``4242`` but that can be changed when
|
|
setting the tunnel endpoint address.
|
|
|
|
The actual captured network packets received at the end of the tunnel will look
|
|
like this:
|
|
|
|
.. code-block:: console
|
|
|
|
No. Time Source Destination Protocol Length Info
|
|
34 106.078538049 192.0.2.1 192.0.2.2 ICMP 94 Echo (ping) request id=0xdc36, seq=0/0, ttl=64 (reply in 35)
|
|
|
|
Frame 34: 94 bytes on wire (752 bits), 94 bytes captured (752 bits) on interface zeth-ip6ip, id 0
|
|
Raw packet data
|
|
Internet Protocol Version 6, Src: 2001:db8:200::1, Dst: 2001:db8:200::2
|
|
User Datagram Protocol, Src Port: 4242, Dst Port: 4242
|
|
Ethernet II, Src: 02:00:5e:00:53:3b (02:00:5e:00:53:3b), Dst: ICANNIAN_00:53:ff (00:00:5e:00:53:ff)
|
|
Internet Protocol Version 4, Src: 192.0.2.1, Dst: 192.0.2.2
|
|
Internet Control Message Protocol
|
|
|
|
No. Time Source Destination Protocol Length Info
|
|
35 106.098850599 192.0.2.2 192.0.2.1 ICMP 94 Echo (ping) reply id=0xdc36, seq=0/0, ttl=64 (request in 34)
|
|
|
|
Frame 35: 94 bytes on wire (752 bits), 94 bytes captured (752 bits) on interface zeth-ip6ip, id 0
|
|
Raw packet data
|
|
Internet Protocol Version 6, Src: 2001:db8:200::1, Dst: 2001:db8:200::2
|
|
User Datagram Protocol, Src Port: 4242, Dst Port: 4242
|
|
Ethernet II, Src: ICANNIAN_00:53:ff (00:00:5e:00:53:ff), Dst: 02:00:5e:00:53:3b (02:00:5e:00:53:3b)
|
|
Internet Protocol Version 4, Src: 192.0.2.2, Dst: 192.0.2.1
|
|
Internet Control Message Protocol
|