2016年4月13日 星期三

doxygen常見問題

設定wizard時需要注意的細節:
  • Step1設定working directory時,不可使用複製貼上字串的方式設定指定目錄
  • 切記需要使用DOT_PATH為/usr/local/bin,若無設定則會在run doxygen之後發生下述錯誤訊息 sh: dot: command not found,可透過安裝graphviz的方式並確認DOT_PATH設定無誤。

關於相關指令用法以及註解撰寫格式可參照:

GNU parallel 應用範例

說明範例採用1.txt與2.txt作為輸入檔案範例:
檔案1.txt內容為
A
B
C
檔案2.txt內容為:
D
E
F

指令範例1:
parallel echo ::: $(cat 1.txt) ::: $(cat 2.txt) 2>/dev/null

輸出:
B F
C D
B E
B D
C E
A F
A E
A D
C F

指令範例2:
parallel -k echo ::: $(cat 1.txt) ::: $(cat 2.txt) 2>/dev/null

輸出:
A D
A E
A F
B D
B E
B F
C D
C E
C F

2016年4月12日 星期二

使用lynx快速取得網頁的超連結並存成清單,並搭配wget下載URL清單檔案

簡介

常常在製作爬蟲程式時,相當需要快速將單頁網頁上面出現的所有超連結存成清單,以方便後續利用wget程式。

殺手級的下載工具的功能主要有:
  1. 找出指定網頁的所有相關URL連結並存成文件
  2. 使用wget指令下載所有相關URL
  3. 使用GNU parallel平行執行多個執行工作
實際範例

下面以gstreamer官方網站的網址作為舉例:
https://gstreamer.freedesktop.org/data/events/gstreamer-conference/2015/

1)利用如下指令快速輸出URL清單列表:
lynx  -dump https://gstreamer.freedesktop.org/data/events/gstreamer-conference/2015/ |grep http|awk '{print $2}' > urls.txt
2)使用wget指令下載URL清單:
wget -i urls.txt 
3)使用GNU parallel工具平行執行多個工作
關於parallel指令使用方法參考:https://www.gnu.org/software/parallel/parallel_tutorial.html
cat urls.txt | parallel "wget -i {}"

將(1)(2)(3)三個步驟觀念整合後可轉寫成shell將其自動化。



補充(若想要監控目錄的下載狀況,可透過watch指令觀察指定目錄的文件狀態):
watch -d ls

補充(若發生zombie的狀況,可使用下列指令清除zombie的parent process): 
kill $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}')

由於zombie process已經結束,所以無法使用kill指令刪除,可透過終結parent process的方式刪除zombie。(當parent process終結時,zombie將繼承init,並且parent process將會等待init並且清除在process table上面的記錄)

參考來源:http://stackoverflow.com/questions/16944886/how-to-kill-zombie-process

A zombie is already dead, so you cannot kill it. To clean up a zombie, it must be waited on by its parent, so killing the parent should work to eliminate the zombie. (After the parent dies, the zombie will be inherited by init, which will wait on it and clear its entry in the process table.) If your daemon is spawning children that become zombies, you have a bug. Your daemon should notice when its children die and wait on them to determine their exit status.

2016年4月11日 星期一

快速調整man指令的分頁工具// How to check and set pager for 'man' command?

快速調整man指令的分頁工具

常見的分頁工具如下兩個:
  • /bin/more
  • /bin/less
如何快速使用指令更改:
  • 使用file指令查詢連結
  • 使用readlink -f 快速查找最終連結到的檔案
  • 若要重新設定連結的指定位置可以使用ln -sf /etc/alternatives/pager /bin/more其他pager
  • (由於/etc/alternatives/pager已經存在,若要重新設定連結需要搭配-f參數)


2016年4月3日 星期日

NAT 與 穿越防火牆技術


參考來源:http://www.cs.nccu.edu.tw/~lien/Writing/NGN/firewall.htm

關於Network Address Translation (NAT):
  • Why NAT? 解決IPv4地址短缺的方案
  • What is NAT? IP封包通過路由器或防火牆時重寫源IP地址或目的IP地址的技術。
  • How many NAT types? 
    • Full cone NAT
    • Address-Restricted cone NAT
    • Port-Restrict cone NAT
    • Symmetric NAT
Full cone NAT,亦即著名的一對一(one-to-one)NAT
  • 一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。任意外部主機都能通過給eAddr:port2發包到達iAddr:port1
Full Cone NAT.svg
Address-Restricted cone NAT
  • 一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。任意外部主機(hostAddr:any)都能通過給eAddr:port2發包到達iAddr:port1的前提是:iAddr:port1之前發送過包到hostAddr:any. "any"也就是說埠不受限制
Restricted Cone NAT.svg
Port-Restricted cone NAT
類似受限制錐形NAT(Restricted cone NAT),但是還有埠限制。
  • 一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。一個外部主機(hostAddr:port3)能夠發包到達iAddr:port1的前提是:iAddr:port1之前發送過包到hostAddr:port3.
Port Restricted Cone NAT.svg
Symmetric NAT(對稱NAT)
  • 每一個來自相同內部IP與埠,到一個特定目的地地址和埠的請求,都映射到一個獨特的外部IP位址和埠。
    同一內部IP與埠發到不同的目的地和埠的信息包,都使用不同的映射
  • 只有曾經收到過內部主機封包的外部主機,才能夠把封包發回
Symmetric NAT.svg

常見穿越防火牆/NAT的相關技術:
  • UPnP(Universal Plug and Play)
  • STUN(Simple Traversal of UDP Through Network Address Translators)-RFC 3489
  • TURN(Traversal Using Relay NAT)
  • ALG(Application Layer Gateway)
  • ICE(Interactive Connectivity Establish)
UPnP缺點 :NAT必須支援UPnP協定
STUN缺點:Symmetric NAT無法穿透
TURN缺點 : TURN server需要承受連線頻寬
ALG缺點:基於網路安全,網管人員將不會接受用戶的應用程式控制他們的NAT


相關開源工具:
pystun, 提供查詢外部IP位置及NAT型別:https://github.com/jtriley/pystun
pjnath, Open Source ICE, STUN, and TURN Library: http://www.pjsip.org/pjnath/docs/html/