2014年8月16日 星期六

OpenWrt 用到 libpcap 的程式

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

RS-232 Power

從 RS-232 取得電源

RS-232 訊號的電壓相對於 GND 是 -3V~-15V (mark, logic 1) 及 +3V~+15V (space, logic 0),負載 3~7 kΩ。有些接收端用 1.7V 跟 1.2V 區別 high 跟 low,跟 TTL 相容,但要加反向器。RS-232 驅動輸出電阻至少 300Ω,電壓至少 ±5V,最多 ±25V,但較少超過 ±12V 的。

DB-9 訊號
  1. DCD (Data Carrier Detect):輸入
  2. RxD:輸入
  3. TxD:輸出
  4. DTR (Data Terminal Ready) 輸出
  5. GND
  6. Data Set Ready
  7. RTS (Request To Send) 輸出
  8. CTS (Clear To Send)
  9. RI (Ring Indicator)
輸出的接腳都能拿來提供電源,有 DTR、RTS 跟 TxD,能提供多少電流跟使用的 RS-232 驅動能力有關。

參考電路

應用:

2014年8月15日 星期五

Linux POSIX semaphore

Linux semaphore sem_t 有一個 ≥0 的整數,sem_post() 將它加 1,sem_wait() 等候到 >0 時將讓它減一。另外還有 sem_trywait() 不等候,sem_timedwait() 等候到特定時間。

Linux semaphore 有兩種:memory-based 和 named。
  • Memory-based,或稱非 named:在某個記憶體位置,透過 sem_init() 初始化、sem_destroy() 銷毀。依照記憶體位置的不同,又可分成 thread-shared semaphore 跟 process-shared semaphore。前者只要是單一 process 內的某個位址,旗下的 thread 都可以存取。後者需要放在不同 process 都可以存取的 shared memory (可透過 shmget()、shm_open()、或 mmap() 取得),或者 fork 的子程序繼承了記憶體對應,也可以存取。
    • sem_init(sem_t *, int pshared, unsigned int value)
    • sem_destroy()
  • Named:有個名稱在 /dev/shm/sem.名稱,透過 sem_open() 建立或開啟、sem_close() 關閉、sem_unlink() 移除。
    • sem_open()/sem_close()/sem_unlink()
sem_post()
sem_wait(sem_t *):回傳 0 表示等候到 semaphore 並減一。
sem_trywait(sem_t *):類似 sem_wait(),但 semaphore 為 0 時不等候,回傳 -1 及 errno = EAGAIN。

sem_timedwait(sem_t *, const struct timespec *):類似 sem_wait(),但最久只等候到某個 Epoch 時間,等候不到的話回傳 -1 及 errno = ETIMEDOUT。
  • 可用來在特定時間執行某項工作。
  • 等候是呼叫 nanosleep() 處理

sem_getvalue():取得目前 semaphore 值。

等候 semaphore 成功回傳 0;失敗 semaphore 不變,回傳 -1 並設 errno。

errnosem_wait()sem_trywait()sem_timedwait()
EINTRsignal 中斷
EINVALsemaphore 無效semaphore 或時間 tv_nsecs 無效
EAGAIN-semaphore 為 0-
ETIMEDOUT--逾時

註:uClibc 不支援 pshared 和 named semaphore,SEM_VALUE_MAX 是 2147483647。內部使用 __pthread_lock()、一個 semaphore 計數值、以及一個 waiting queue。

應用:binary semaphore (比較:mutex), counting semaphore

參考

  1. man sem_overview, man sem_init, man sem_wait

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...