用途
- base-files VERSION 一部分
- VERSION_SED 取代 %R:用在 /etc/banner, /etc/openwrt_version, /etc/openwrt_release, /etc/device_info, /etc/opkg/distfeeds.conf
- repositories.conf
- mac80211 編譯 compat_version
- netgear-dni、tplink-safeloader
grep squash /proc/mounts來檢查,回類似
/dev/root /rom squashfs ro,relatime 0 0
ubus 的心臟,提供界面給其它 daemons 註冊和送訊息,採用 Unix sockets 和 TLV (type-length-value) 訊息。| OpenWrt | Buildroot | Desktop | |
|---|---|---|---|
| C 標準函式庫 | uClibc | ? | glibc |
| init | procd | ? | systemd |
| 網路設定 | netifd | ? | NetworkManager |
| 套件管理 | opkg | ? | apt, ... |
/sbin/hotplug2 --set-worker /lib/hotplug2/worker_fork.so --set-rules-file /etc/hotplug2-init.rules --no-persistent --set-coldplug-cmd /sbin/udevtrigger在 init 的 boot
/sbin/hotplug2 --set-worker /lib/hotplug2/worker_fork.so --set-rules-file /etc/hotplug2-init.rules --persistent &
/sbin/hotplug2 --override --persistent --set-rules-file /etc/hotplug2.rules --set-coldplug-cmd /sbin/udevtrigger --max-children 1 >/dev/null 2>&1 &疑問:
[ -z "$PREINIT" ] && exec /sbin/init
::sysinit:/etc/init.d/rcS S boot在 procd 會用 glob() 取出所有 /etc/rc.d/S* 的檔案,全部加到 libubox runqueue 去執行。
::shutdown:/etc/init.d/rcS K shutdown
| old | procd |
|---|---|
| start() | start_service() 至少要提供 json command 的部份 |
| stop() | 已採用 procd_kill 停止程式,stop_service() |
| reload() | 如有 reload_service() 則執行,不然執行 start() |
| running() | |
| trace() |
source /lib/functions/network.sh
if network_get_ipaddr addr "wan"; then
echo "IP is $addr"
fi
pcapsipdump: one file per sip session
cshark: CloudShark capture tool
collectd-mod-dns: DNS traffic input plugin
fwknopd:
arpd
wknock
airpwn
daemonlogger
lft
whob
arpwatch
aircrack-ng
dsniff
wiviz
karma
bandwidthd
ulogd-mod-pcap
faifa
rarpd
scdp
scanlogd
snort
snort-mysql
snort-pgsql
snort-wireless
snort-wireless-mysql
snort-wireless-pgsql
pyrit
nmap, nmap-ssl
ncat, ncat-ssl
nping
ucarp
ettercap:用來 injecting traffic
6tunnel
netdiscover:
cdp-tools
tcptraceroute
kismet-drone, kismet-server
scanlogd
raddump
darkstat
ngrep
netdiscover
knock, knockd
softflowd
tstat
wing
ipcad
pmacct-client, nfacctd, pmacctd, sfacctd, uacctdpmacctd-pgsql, nfacctd-mysql, pmacctd-mysql, sfacctd-mysql, uacctd-mysql, nfacctd-pgsql, sfacctd-pgsql, uacctd-pgsql, nfacctd-sqlite, pmacctd-sqlite, sfacctd-sqlite, uacctd-sqlite
nprobe
hping3
reaver
ptunnel
aircrack-ptw
fprobe
ssldump
imsnif
thc-ipv6-*
tcpdump
iftop
參考:libpcap
git clone git://git.openwrt.org/openwrt.git # trunk,目前是 r40588 cd openwrt make # 可能需要安裝編譯 OpenWrt 所需要的套件,例如 subversion、libncurses5-dev 等,再 make # 出現選單,在 Target System 選 x86,在 Target Images 加選 Build VirtualBox image files # 經過長久的編譯
# 產生的 vdi 擋在 bin/x86 目錄下
define Package/套件名或
define KernelPackage/套件名裡面的一些參數,例如 TITLE:= 是填顯示的標題名稱。
KCONFIG:=CONFIG_HOSTAP CONFIG_HOSTAP_FIRMWARE=y CONFIG_HOSTAP_FIRMWARE_NVRAM=y,如果選了 hostap 套件,Kernel 設定就會增加
,對應到 Kernel 程式,包括外部模組,就會有CONFIG_HOSTAP=m CONFIG_HOSTAP_FIRMWARE=y CONFIG_HOSTAP_FIRMWARE_NVRAM=y
#define CONFIG_HOSTAP_MODULE #define CONFIG_HOSTAP_FIRMWARE #define CONFIG_HOSTAP_FIRMWARE_NVRAM
config <section-type> [<section>]
<section> 是 section 的名稱,可有可無。沒有 section 名稱時用 @<section-type>[index] 的方式存取。# 開始為註解註界config section-type section-name config section-type option option-name option-value list option-name option-value
# cat /etc/config/foo首先這裡存在 <config> 檔 foo,內容分成許多 config 開頭的 section,每個 section 有 option 或 list。範例裡 <section-type> 都是 bar。每個 option 定義一對<option> 及 <value>,而 list 讓一個 <option> 有許多 <value>。
config bar first
option name 'Mr. First'
config bar
option name 'Mr. Second'
config bar third
option name 'Mr. Third'
list kid aaa
list kid bbb
# uci
Usage: uci [<options>] <command> [<arguments>]
Commands:
batch
export [<config>]
import [<config>]
changes [<config>]
commit [<config>]
add <config> <section-type>
add_list <config>.<section>.<option>=<string>
show [<config>[.<section>[.<option>]]]
get <config>.<section>[.<option>]
set <config>.<section>[.<option>]=<value>
delete <config>[.<section[.<option>]]
rename <config>.<section>[.<option>]=<name>
revert <config>[.<section>[.<option>]]
reorder <config>.<section>=<position>
Options:
-c <path> set the search path for config files (default: /etc/config)
-d <str> set the delimiter for list values in uci show
-f <file> use <file> as input instead of stdin
-L do not load any plugins
-m when importing, merge data into an existing package
-n name unnamed sections on export (default)
-N don't name unnamed sections
-p <path> add a search path for config change files
-P <path> add a search path for config change files and use as default
-q quiet mode (don't print error messages)
-s force strict mode (stop on parser errors, default)
-S disable strict mode
-X do not use extended syntax on 'show'
# uci get foo.first要注意的是 uci show [<config>] 時,會顯示所有的 <section-type> 及 <value>,<section-type> 的 index 不計有 <section> 的,所以可能會有所不同。
bar
# uci get foo.first.name
Mr. First
# uci get foo.@bar[0].name
Mr. First
# uci get foo.@bar[1].name
Mr. Second
# uci get foo.@bar[-1].name
Mr. Third
# uci get foo.third.kid
aaa bbb
# uci show foo
foo.first=bar
foo.first.name=Mr. First
foo.@bar[0]=bar
foo.@bar[0].name=Mr. Second
foo.third=bar
foo.third.name=Mr. Third
foo.third.kid=aaa bbb
所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...