2011年12月28日 星期三

flv/mp4 影片轉成 mp3 音檔

想在 mp3 隨身聽聽歌,只有找到 flvmp4 的影片,去查看其音效的編碼 (滑鼠右鍵->屬性->音效/視像) 大多是 MPEG-4 AAC audio。我用 ffmpeg 抽出聲音部份,再用 mplayer 轉成 wav 檔,再用 lame 轉成 mp3,指令如下:

ffmpeg -i xxx.flv -acodec copy xxx.aac
mplayer -vc null -vo null -ao pcm:fast -ao pcm xxx.aac -ao pcm:file=xxx.wav
lame xxx.wav

應該有較簡單的方法,例如 ffmpeg 抽出聲音時,直接轉成 mp3 儲存,但需要 ffmpeg 編譯時支援 mp3 編碼。

參考:
  1. Howto:convert aac/mp4 to wav/mp3/ogg on Linux (會彈出廣告)

2011年12月16日 星期五

第三者 Ethernet 抓封包

(修改自 Wireshark 的圖片)
要研究 router 跟某台機器之間封包,一種可能是直接在這台機器安裝 Wireshark 等抓封包分析軟體來使用,但如果那台機器不是一般電腦,可能就無法安裝軟體。這時候需要另一台電腦安裝 Wireshark、接上獨立的或內建於 router 的 Ethernet switch,但這樣封包是不會跑過來的,因為現在的 Ethernet switch (或號稱 Ethernet Hub) 都採用 bridging 處理,由目標 MAC 位址決定只會送到特定的 Ethernet switch 埠。

如此一來,就可能需要其它特別的硬體配合,例如找以前舊式的 Ethernet Hub、找支援 monitoring 或 mirroring 的高階 Ethernet switch、有兩個 Ethernet 介面的電腦、使用 Passive Ethernet TAP、使用 Passive Ethernet Hub 等。

也有純粹軟體的解法,一種方式是利用 ARP Poisoning (或稱 ARP spoofing),放 ARP 毒藥給雙方,分別告訴雙方的對方是自己的 MAC 位址,掩蓋正常的 ARP,這樣雙方之間的封包就會送到自己的 MAC 位址,自己再分別轉送來維持他們通訊暢通,自己也順便「觀察」。程式 ettercap 有支援,這是我認為最方便的方式。

使用步驟如下:
  1. 安裝 ettercap,我安裝個板本是 NG-0.73
    • sudo apt-get install ettercap-gtk
  2. 執行 ettercap
    1. 「Sniff」→「Unifed Sniffing」,選自己的網卡。 (不知為何,此步驟會將 /proc/sys/net/ipv4/ip_forward 設為 0)
    2. 「Hosts」→「Scan for hosts」。會對子網上每個 IP 發 ARP 詢問。
    3. 「Hosts」→「Hosts lists」,將雙方分別「Add to Target 1」及「Add to Target 2」。 
    4. 「Mitm」→「Arp Poisoning。此時開始假冒雙方,會先 ping 雙方,再多次 ARP 雙方,雙方間的封包就會跑過來了
  3. 啟用 IP 轉發功能,維持被觀察機器的通訊暢通。(似乎不能直接 sudo 執行,所以先變成 root 再執行)
    • sudo -i
    • echo 1 > /proc/sys/net/ipv4/ip_forward
    • exit
  4. 此時 Wireshark 可以抓到雙方間的封包,封包會看到兩份,一份是進來的,一份是轉發出去的,兩者的來源 MAC 位址跟目標 MAC 位址是不同的。
  5. 停止 Arp Poisoning
    • 在 ettercap,「Mitm」→「Stop mitm attack(s)」。
註:步驟 2. 3. 4. 可以隨意組合,例如 IP 轉發可以在後來想要啟用時才啟用,但注意 ettercap 的「Sniff」→「Unifed Sniffing」會將 /proc/sys/net/ipv4/ip_forward 設為 0。
註:ettercap 也有 Windows 版,在 http://sourceforge.net/projects/ettercap/files/unofficial%20binaries/windows/ 下載。
註:Mitm 是 man-in-the-middle。
註:由此可知,你的封包是很容易被觀察的,即使硬體都沒動到。但用 ARP Poisoning 也不是都能成功,機器的 ARP 表改用靜態的、router 紀錄並檢查每個 IP 位址的 MAC 位址等可以防止封包被導向。監聽是否有異常的 ARP 回應也可以發現。
註:還有別的軟體方式,例如 MAC Flooding,用封包把 Ethernet switch 的 MAC Table 灌爆,而將所有封包都 broadcast 處理。dsniff 等軟體有支援這種功能。

參考:
  1. Wireshark: Ethernet capture setup (說明許多抓封包方式)
  2. Ettercap MITM攻擊詳細教學 (裡面所言並不是所有步驟都需要)
2011/12/20:修正 ettercap 的「Sniff」→「Unifed Sniffing」會造成 /proc/sys/net/ipv4/ip_forward 設為 0

延伸閱讀

2011年12月14日 星期三

非 root 執行 wireshark 抓封包

wireshark 安裝完,需要用 root 身份才能執行抓網路介面的封包,現在要改成不必用 root 身份:
  1. sudo dpkg-reconfigure wireshark-common
    •  Should non-superusers be able to capture packets? 選「是」,會產生 wireshark 群組
  2. sudo vi /etc/group
    • 在 wireshark 群組加上自己
  3. 重新登入
這樣就可以用自己身份執行 wireshark 抓網路封包。

參考:
  1. /usr/share/doc/wireshark-common/README.Debian

2011年12月11日 星期日

git grep 的自動換行

git grep 查詢字串樣式時,超出行寬的字就看不到了,如何讓他自動換行,看到整行的字呢?執行

git config --global core.pager "less -+FRSX -FRX"

就可以了,這個動作會在 ~/.gitconfig 的 [core] section 加一行

pager = less -+FRSX -FRX

git 的換頁程式是用 less,而控制 less 行為的環境變數 -- LESS,預設為 FRSX。其中 S 是削減超過行寬的字,要把這項設定移除。

參考:core help config 的 core.pager

2011年12月4日 星期日

VirtualBox 使用 USB 裝置

我的主端 (Host) 作業系統是 Ubuntu 11.10,需在 /etc/group 的 vboxusers 群組成員加上自己。

如要使用 USB 2.0,還需要到 virtualbox 網站下載 Oracle VM VirtualBox Extension Pack,執行 VirtualBox 安裝。

延伸閱讀

SIP header Via

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