1.. zephyr:code-sample:: net-capture
2 :name: Network packet capture
3 :relevant-api: net_capture
4
5 Capture network packets and send them to a remote host via IPIP tunnel.
6
7Overview
8********
9
10This application will setup the device so that net-shell can be used
11to enable network packet capture.
12
13The captured packets are sent to
14remote host via IPIP tunnel. The tunnel can be configured to be in the
15same connection as what we are capturing packets or it can be a separate
16bearer. For example if you are capturing network traffic for interface 1,
17then the remote host where the captured packets are sent can also be reached
18via interface 1 or via some other network interface if the device has
19multiple network interfaces connected.
20
21Requirements
22************
23
24- :ref:`networking_with_host`
25
26Building and Running
27********************
28
29Build the sample application like this:
30
31.. zephyr-app-commands::
32 :zephyr-app: samples/net/capture
33 :board: <board to use>
34 :conf: <config file to use>
35 :goals: build
36 :compact:
37
38
39Network Configuration
40*********************
41
42The ``net-tools`` project contains ``net-setup.sh`` script that can be used to setup
43the tunneling.
44
45In terminal #1, type:
46
47.. code-block:: console
48
49 ./net-setup.sh -c zeth-tunnel.conf
50
51The script will create following network interfaces:
52
53.. code-block:: console
54
55 zeth: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
56 inet 192.0.2.2 netmask 255.255.255.255 broadcast 0.0.0.0
57 inet6 2001:db8::2 prefixlen 128 scopeid 0x0<global>
58 ether 00:00:5e:00:53:ff txqueuelen 1000 (Ethernet)
59 RX packets 0 bytes 0 (0.0 B)
60 RX errors 0 dropped 0 overruns 0 frame 0
61 TX packets 0 bytes 0 (0.0 B)
62 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
63
64 zeth-ip6ip: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1480
65 inet6 2001:db8:200::2 prefixlen 64 scopeid 0x0<global>
66 inet6 fe80::c000:202 prefixlen 64 scopeid 0x20<link>
67 sit txqueuelen 1000 (IPv6-in-IPv4)
68 RX packets 0 bytes 0 (0.0 B)
69 RX errors 0 dropped 0 overruns 0 frame 0
70 TX packets 0 bytes 0 (0.0 B)
71 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
72
73 zeth-ip6ip6: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1452
74 inet6 fe80::486c:eeff:fead:5d11 prefixlen 64 scopeid 0x20<link>
75 inet6 2001:db8:100::2 prefixlen 64 scopeid 0x0<global>
76 unspec 20-01-0D-B8-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
77 RX packets 0 bytes 0 (0.0 B)
78 RX errors 0 dropped 0 overruns 0 frame 0
79 TX packets 0 bytes 0 (0.0 B)
80 TX errors 8 dropped 8 overruns 0 carrier 8 collisions 0
81
82 zeth-ipip: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1480
83 inet 198.51.100.2 netmask 255.255.255.0 destination 198.51.100.2
84 inet6 fe80::5efe:c000:202 prefixlen 64 scopeid 0x20<link>
85 tunnel txqueuelen 1000 (IPIP Tunnel)
86 RX packets 0 bytes 0 (0.0 B)
87 RX errors 0 dropped 0 overruns 0 frame 0
88 TX packets 0 bytes 0 (0.0 B)
89 TX errors 7 dropped 0 overruns 0 carrier 0 collisions 0
90
91 zeth-ipip6: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1452
92 inet 203.0.113.2 netmask 255.255.255.0 destination 203.0.113.2
93 inet6 fe80::387b:a6ff:fe56:6cac prefixlen 64 scopeid 0x20<link>
94 unspec 20-01-0D-B8-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
95 RX packets 0 bytes 0 (0.0 B)
96 RX errors 0 dropped 0 overruns 0 frame 0
97 TX packets 0 bytes 0 (0.0 B)
98 TX errors 7 dropped 7 overruns 0 carrier 0 collisions 0
99
100The ``zeth`` is the outer tunnel interface, all the packets go via it.
101The other interfaces receive packets depending on the configuration you have
102in the Zephyr side.
103
104Network Capture Configuration
105=============================
106
107In Zephyr console, type:
108
109.. code-block:: console
110
111 uart:~$ net iface
112
113 Interface 0x807df74 (Virtual) [1]
114 =================================
115 Interface is down.
116
117 Interface 0x807e040 (Ethernet) [2]
118 ==================================
119 Link addr : 02:00:5E:00:53:3B
120 MTU : 1452
121 Flags : AUTO_START,IPv4,IPv6
122 Ethernet capabilities supported:
123 IPv6 unicast addresses (max 4):
124 fe80::5eff:fe00:533b autoconf preferred infinite
125 2001:db8::1 manual preferred infinite
126 IPv6 multicast addresses (max 4):
127 ff02::1
128 ff02::1:ff00:533b
129 ff02::1:ff00:1
130 IPv6 prefixes (max 2):
131 <none>
132 IPv6 hop limit : 64
133 IPv6 base reachable time : 30000
134 IPv6 reachable time : 43300
135 IPv6 retransmit timer : 0
136 IPv4 unicast addresses (max 2):
137 192.0.2.1 manual preferred infinite
138 IPv4 multicast addresses (max 1):
139 <none>
140 IPv4 gateway : 0.0.0.0
141 IPv4 netmask : 255.255.255.0
142
143Next the monitoring is setup so that captured packets are sent as a payload
144in IPv6/UDP packets.
145
146.. code-block:: console
147
148 uart:~$ net capture setup 192.0.2.2 2001:db8:200::1 2001:db8:200::2
149 Capture setup done, next enable it by "net capture enable <idx>"
150
151The ``net capture`` command will show current configuration. As we have not
152yet enabled capturing, the interface is not yet set.
153
154.. code-block:: console
155
156 uart:~$ net capture
157 Network packet capture disabled
158 Capture Tunnel
159 Device iface iface Local Peer
160 NET_CAPTURE0 - 1 [2001:db8:200::1]:4242 [2001:db8:200::2]:4242
161
162Next enable network packet capturing for interface 2.
163
164.. code-block:: console
165
166 uart:~$ net capture enable 2
167
168The tunneling interface will be UP and the captured packets will be sent to
169peer host.
170
171.. code-block:: console
172
173 uart:~$ net iface 1
174
175 Interface 0x807df74 (Virtual) [1]
176 =================================
177 Name : IPv4 tunnel
178 Attached : 2 (Ethernet / 0x807e040)
179 Link addr : 8E:F9:94:6D:B9:E6
180 MTU : 1452
181 Flags : POINTOPOINT,NO_AUTO_START,IPv6
182 IPv6 unicast addresses (max 4):
183 fe80::aee6:fbff:fe50:28c0 autoconf preferred infinite
184 2001:db8:200::1 manual preferred infinite
185 IPv6 multicast addresses (max 4):
186 <none>
187 IPv6 prefixes (max 2):
188 <none>
189 IPv6 hop limit : 64
190 IPv6 base reachable time : 30000
191 IPv6 reachable time : 22624
192 IPv6 retransmit timer : 0
193 IPv4 not enabled for this interface.
194
195If you now do this:
196
197.. code-block:: console
198
199 uart:~$ net ping -c 1 192.0.2.2
200
201You should see a ICMPv4 message sent to ``192.0.2.2`` and also the captured
202packet will be sent to ``192.0.2.2`` in tunnel to ``2001:db8:200::2``
203address. The UDP port is by default ``4242`` but that can be changed when
204setting the tunnel endpoint address.
205
206The actual captured network packets received at the end of the tunnel will look
207like this:
208
209.. code-block:: console
210
211 No. Time Source Destination Protocol Length Info
212 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)
213
214 Frame 34: 94 bytes on wire (752 bits), 94 bytes captured (752 bits) on interface zeth-ip6ip, id 0
215 Raw packet data
216 Internet Protocol Version 6, Src: 2001:db8:200::1, Dst: 2001:db8:200::2
217 User Datagram Protocol, Src Port: 4242, Dst Port: 4242
218 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)
219 Internet Protocol Version 4, Src: 192.0.2.1, Dst: 192.0.2.2
220 Internet Control Message Protocol
221
222 No. Time Source Destination Protocol Length Info
223 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)
224
225 Frame 35: 94 bytes on wire (752 bits), 94 bytes captured (752 bits) on interface zeth-ip6ip, id 0
226 Raw packet data
227 Internet Protocol Version 6, Src: 2001:db8:200::1, Dst: 2001:db8:200::2
228 User Datagram Protocol, Src Port: 4242, Dst Port: 4242
229 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)
230 Internet Protocol Version 4, Src: 192.0.2.2, Dst: 192.0.2.1
231 Internet Control Message Protocol
232