NAME¶
dumbnet —
dumb networking library test
program
SYNOPSIS¶
dumbnet command
args [...] |
|
DESCRIPTION¶
dumbnet is a simple test program for the
dumbnet(3) library. It can be used to compose and transmit
network datagrams as a Unix-style filter (e.g. reading from or writing to
files and pipes) or modify the local system network configuration (including
the ARP cache, firewall ruleset, network interfaces, and routing table).
Payload generation commands¶
- addr
address [...]
- Convert the address (specified as a
hostname, IP address, or MAC address) into its binary representation on
standard output.
- hex
string [...]
- Convert the C-style escaped string
(shellcode, for instance) into its binary representation on standard
output.
- rand
len
- Write len random bytes to standard
output.
Packet encapsulation
commands¶
- eth
[type type]
[src mac]
[dst
mac]
- Prepend the data read from standard input with an Ethernet
header on standard output. The Ethernet type may be
specified as ‘
arp
’,
‘ip
’, or as a hex, octal, or decimal
number.
- arp
[op op]
[sha mac]
[spa host]
[tha mac]
[tpa
host]
- Prepend the data read from standard input with an ARP
header on standard output. The ARP op may be
specified as ‘
req
’,
‘rep
’,
‘revreq
’,
‘revrep
’, or as a hex, octal, or
decimal number.
- ip
[tos num]
[id num]
[off offset]
[ttl num]
[proto
protocol]
[src host]
[dst dst]
- Prepend the data read from standard input with an IP header
on standard output. The fragmentation offset may be
specified as a decimal number (optionally concatenated with
‘
+
’ to indicate more fragments) or as
a hex number. The protocol may be specified by name,
or as a hex, octal, or decimal number.
- icmp
[type num]
[code
num]
- Prepend the data read from standard input with an ICMP
header on standard output.
- tcp
[sport port]
[dport port]
[flags
flags] [seq
num] [ack
num] [win
num] [urp
num]
- Prepend the data read from standard input with a TCP header
on standard output. A port may be specified by name
or hex, octal, or decimal number. The TCP flags may
be specified as some combination of the characters in the set
‘
SAFRPU
’ or as a hex number.
- udp
[sport port]
[dport
port]
- Prepend the data read from standard input with a UDP header
on standard output. A port may be specified by name
or hex, octal, or decimal number.
Packet transmission
commands¶
- send
[device]
- Read a packet from standard input and send it over the
network. If no device is specified, the packet is
assumed to be an IP datagram and routed to its destination. Otherwise, the
packet is assumed to be an Ethernet frame and is transmitted on the
specified interface.
Kernel interface commands¶
- arp
show
- Display the kernel ARP cache.
- arp get
host
- Display the kernel ARP entry for
host.
- arp add
host mac
- Add an ARP entry mapping the mac
address for host.
- arp delete
host
- Delete the ARP entry for host.
- fw
show
- Display the kernel firewall ruleset.
- fw
add|delete action
direction device
protocol
src[:port[-max]]
dst[:port[-max]]
[type[/code]]
- Add a rule to or delete a rule from the active firewall
ruleset. The action must be either
‘
allow
’ or
‘block
’. The direction must be either
‘in
’ or
‘out
’. The
device may specify an interface name, or
‘any
’. The
protocol may be specified by name, or as a decimal
number. For TCP and UDP protocols, a port (or range,
if specified with a max value) may be specified in
decimal and appended to the source and/or destination address. For ICMP, a
type (and optional code) may
be specified in decimal.
- intf
show
- Display the configuration of all network interfaces.
- intf get
device
- Display the configuration for the interface specified by
device.
- intf set
device [alias
host] [dst
host] [inet
host] [link
mac]
[up|down]
[arp|noarp]
- Configure the interface specified by
device.
- route
show
- Display the kernel routing table.
- route get
dst
- Display the route for the destination
dst, specified as a hostname, IP address, or network
prefix in CIDR notation.
- route add
dst gw
- Add a route for the destination dst
through the gateway gw.
- route
delete dst
- Delete the route for the destination
dst.
EXAMPLES¶
Send a UDP datagram containing random shellcode:
dumbnet hex "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89" \
"\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80" \
"\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh" | \
dumbnet udp sport 555 dport 666 | \
dumbnet ip proto udp src 1.2.3.4 dst 5.6.7.8 | dumbnet send
Save an ARP request in a file and send it twice:
dumbnet arp op req sha 0:d:e:a:d:0 spa 10.0.0.3 tpa 10.0.0.4 | \
dumbnet eth type arp src 0:d:e:a:d:0 dst ff:ff:ff:ff:ff:ff > arp.pkt
dumbnet send fxp0 < arp.pkt
dumbnet send fxp0 < arp.pkt
Send a fragmented ping packet:
# Create ping packet with IP header, to set ICMP checksum
echo "monkey monkey monkey monkey" | dumbnet icmp type 8 code 0 | \
dumbnet ip proto icmp src 1.2.3.4 dst 5.6.7.8 > ping.pkt
# Chop off IP header
dd if=ping.pkt of=ping.data bs=20 skip=1
# Fragment IP payload
split -b 24 ping.data p.
# Send fragments
dumbnet ip id 1 off 0+ proto icmp src 1.2.3.4 dst 5.6.7.8 < p.aa | \
dumbnet send
dumbnet ip id 1 off 24 proto icmp src 1.2.3.4 dst 5.6.7.8 < p.ab | \
dumbnet send
COMPATIBILITY¶
The library was originally named
dnet but was renamed to
dumbnet due to a conflict with the DECnet library. This
decision affects not only the filename of the shared library, but also the
header file names and the library's SONAME tag, which means that software
built on a non-Debian-derived distribution will not run with this library and
recompiling the software will only work if some adjustments to header include
directives and compiler/linker flags are made.
SEE ALSO¶
dumbnet(3)
AUTHORS¶
Dug Song ⟨dugsong@monkey.org⟩