forked from markjdb/scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathng_source_alc
executable file
·60 lines (46 loc) · 1.13 KB
/
ng_source_alc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/sh
init()
{
kldload ng_ether ng_source
ngctl mkpeer alc0: source orphans output
ngctl name alc0:orphans src0
ifconfig ue0 192.168.1.1
arp -s 192.168.1.2 20:89:84:48:d2:0d perm pub
sysctl net.inet.icmp.icmplim=0
ifconfig alc0 promisc
}
doit()
{
perl -pe 's/(..)[ \t\n]*/chr(hex($1))/ge' <<EOF | nghook src0: input
00 50 b6 0e a8 25 20 89 84 48 d2 0d 08 00 45 00
00 54 cb 13 00 00 40 01 2c 42 c0 a8 01 02 c0 a8
01 01 08 00 f8 d0 c9 76 00 00 45 37 01 73 00 01
04 0a 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15
16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25
26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35
36 37
EOF
ngctl msg src0: start 1000000000
}
cleanup()
{
ngctl msg src0: stop
ngctl msg src0: clrdata
ifconfig alc0 -promisc
sysctl net.inet.icmplim=200
arp -d 192.168.1.2
ifconfig ue0 -alias
ngctl shutdown src0:
}
if [ $(id -u) -ne 0 ]; then
echo "$(basename $0): need to be root" >&2
exit 1
fi
if [ $# -eq 0 ]; then
doit
elif [ $# -eq 1 -a \( "$1" = init -o "$1" = cleanup \) ]; then
eval $1
else
echo "$(basename $0): bad usage" >&2
exit 1
fi