發表文章

IPv6 notes

筆記:記錄一些之前有用到的IPv6 prefix所代表的意義 前情提要: 1. IPv6 有128bits,8個segments(就是有7個冒號) 2.溝通方式有三種     -  Multicast : 顧名思義就是廣播,一個封包送給多個端點     -  Unicast : 就是一對一囉     -  Anycast : 我不是很懂,類似Multicast是一對多,不過只有端點是屬於Anycast的群組才收得到,封包好像又只送到最近的端點。可參考: http://computernetworkingnotes.com/ipv6-features-concepts-and-configurations/ipv6-address-types-and-formats.html 3. 位址的區域或範圍,主要也是三種     -  Global : 就global 嘛     -  Site-Local : 區域網路,像是192.168 一樣     -  Link-Local : 不懂... 重點: 開始之前... * FF00::/8 ==> /8  代表開頭前8個bits是固定的 Multicast: FF00::/8 Link-Local: FF02:: Site-Local: FF05:: Organization Scope: FF08:: Global: FF0E:: Node-Local / Interface-Local: FF01:: UniCast: Link-Local: FE80::/10 Site-Local: FEC0::/10 Global: 2000:/3 常見的一些表示: ::1 or 0:0:0:0:0:0:0:1  ==> local address / loopback address, like 127.0.0.1 2000:/3 ==> Global address :: or  0:0:0:0:0:0:...

路過proxy的socket

主題 :用socket在做網路的溝通,中間想透過proxy server該怎麼辦??? 簡單來說就下面這幾步,其中跟一般建connection不同的就只有第二步,要先做handshaking 0.建socket 1.跟proxy建立connection 2.丟Sock4/Sock5的protocol給proxy 3.之後丟message都透過這個socket 簡單的code來解釋 0. int Socket = socket ( AF_INET, SOCK_STREAM, 0 ); 1. connect ( Socket , <struct sockaddr with proxy info>, sizeof(struct sockaddr)); 2 . a. send ( Socket , <protocol packet>, <packet size>, 0);     b. recv ( Socket , <reply packet>, <reply packet size>);     c. // check the 2nd byte of the reply packet 3. send ( Socket , <a buffer with your message>, <message length>, 0); 重點就是在第2步啦! 接下來,看看Sock4/Sock5所需準備的packet format SOCK4 : Request Format:          +----+----+----+----+----+----+----+----+----+----+....+----+     | VN | CD | DSTPORT |      DSTIP        | USERID       |NULL|     +----+----+----+----+----+----+----+--...

OpenMQ broker on Windows

筆記:OpenMQ broker with ssl 與config們 版本:OpenMQ  v.4.5 (thread pool is not supported by SSL) 官方會在5.0中讓 SSL support thread pool的管理方式 http://java.net/jira/browse/MQ-252 server side的目錄結構 安裝完OpneMQ後,會在program files下有Sun\MessageQueue的目錄 mq\bin\ ==> 都是broker的相關tool            imqadmin.exe      --> admin在用的tool,可以監看connection資訊(東西相當的少)            imqbrokerd.exe   --> broker執行檔            imqsvcadmin.exe --> 照doc說法,是把broker註冊成Windows Service(沒用過)            imqkeytool.exe    --> 就是gen keystore, certificate用的,我都是用java的keytool etc\mq\ ==> 預設的password file跟broker搜尋certificate的路徑 var\mq\instances\imqbroker\props\config.properties --> 設定檔都在這喔 var\mq\instances\imqbroker\log\log.txt  --> broker的log 一些config 基本上server, client的connection是走jms這個service的,admin是給administrator管理所用的service,也就是只要跟client有關的con...

OpenMQ C Client on Mac

筆記:build OpenMQ C Client with ssl 跟 implementation的注意事項 版本:OpenMQ-C Client v.4.5 在4.x之前的版本,C Client官方不支援Mac 平台,不過有好心人,把之前寫的patch給我們 ref: http://java.net/projects/mq/lists/users/archive/2012-11/message/3 (官方說5.0會把這項patch加進去) 要先去下載nspr跟nss (我是用nspr-4.9.3跟nss-3.1.4) 裡面步驟很詳細,就不再贅述 因為本身很少接觸open source的東西,一整包source code下載下來,很沒有頭緒,所以這裡來很簡單地介紹一下source code的目錄結構,此外他們不是用makefile是用ant 作為build的工具 src/share/cclient/                  ==> 這個就是 c client的source                              /example/C --> 顧名思義,這裡就有範例啦~ src/buildant/                          ==> ant build的設定                      /rules.xml          -->  ant會先吃這個設定檔,在根據裡面資訊去找別的xml                   ...

ActiveMQ-Cpp on Mac

筆記:build ActiveMQ-Cpp with ssl 跟 implementation的注意事項 版本:ActiveMQ-Cpp v3.4.4 ( ipv6 not supported ) 根據文件會需要 CppUnit, APR, APR Util CppUtil是跑UT所需的,懶得跑就不下載 APR跟APR Util可以在這download: http://apr.apache.org/download.cgi (要下載Unix Source,裡面才有要build所需的檔案) 我們的案子需要ssl protocol, 所以需要再多下載Openssl: http://www.openssl.org/source (文件上建議要openssl 1.0以上) 下載完後開始一個個build 基本上都需要先執行configure,產生相關的設定跟makefile才開始build ref: activemq-cpp-library-x.x.x\README.txt *openssl:  ./Configure dist make make install 檔案: libssl.a、libcrypto.a (i386架構) make install後會把binary跟library放到/usr/local/ssl/bin跟/usr/local/ssl/lib下面,後面在build apr-util跟activemq-cpp會需要 *apr: ./configure --enable-shared=no make 檔案: libapr-1.a 檔案會在執行目錄下的一個 .libs的隱藏資料夾 (檔案的架構跟電腦環境相關,我的開發環境為10.7,build出來的檔案就是x86_64(註1)) --enable-shared=no:我讓build出來的檔案是static lib而不是dynamic lib *apr-util: ./configure  --with-openssl=/usr/local/ssl/ --with-apr=../apr-1.4.6 make 檔案: libaprutil-1.a 檔案會在執行目錄下的一個 .libs的隱藏資料夾 (檔案的架構跟電腦環境...

Windows Kernel - basic

圖片
<本篇適合不懂or不熟悉Windows kernel的朋友> 今天來分享一下我所知的Windows kenel,首先先從簡單的開始 一般來說都是見到類似這樣的圖  今天要講的是對於這個圖,再深入"一點點"剖析   從上而下說明 首先在 user mode 的部分 在user mode的最底層一般來說是NTDLL.dll,也就是你呼叫的win32 API,最後都是會到這裡(如果是需要到進到kernel的,那至於哪些不需要進到kernel呢?!下回分解~)。 NTDLL.dll基本上做兩件事,     1.把你要呼叫的函數資訊填到register      2.引發中斷,進入kernel 再來就是kernel的事情了~ 接下來是windows subsystem 有人可能有看過windows subsystem在NTDLL.dll上面,或是跟NTDLL.dll是平行的(就是沒有上下關係的),阿到底那個是對的呢?! 這個問題困惑我很久,看過wiki和"Windows核心原理與實務開發",可以知道subsystem是有直接跟底層接觸的,然後再透過depends,可以確認subsystem跟NTDLL.dll也是有相依性的,故可得上圖,就是兩個狀況都是有的。(等windbg技巧高一點後,直接attach去kernel看看) 再來說 kernel mode 的部分 一般所說的windows kernel,所指的就是 ntoskrnl.exe 這個檔案,而裡面分兩層     1.executive(執行層)      2.(micro) kernel((微)核心) Executive裡面有很多元件,今天就只提基本的部分。承接上面,NTDLL把函數資訊填到reigster後,trigger中斷轉換到kernel,接下來,kernel這邊就由executive層裡的"system service dispatcher"接手,dispatcher會根據register裡存的值去" S ystem S ervice D ispatch T able( SSDT )"找到相對應的函數的address...

Windows Remote Debug

圖片
第一篇文章,先來個基本的教學設定好了~ 也方便自己做紀錄 首先,Windows  remote debug有三種方式     1. COM Port     2. 1394     3. USB (需要USB跳線,或是轉換的裝置) 再來,要開啟Windows的Debug模式(client端(也就是被debug的機器)才需要設定) 這裡分為XP及Vista之後兩種方式 XP and before: 修改boot.ini檔案 這個檔案位於C:下,是隱藏檔,所以需要去"資料夾選項"把隱藏系統檔案的選項勾掉(附註.此檔案有可能是唯讀,所以也要把唯獨屬性拿掉) 打開來看會長得像這樣: [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect 這個時候只需要把最後一行copy下來,加上幾個tag: " /debug /debugport=<COM Port No.> /baudrate=<Baud Rate> "  最後會長得像這樣: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional - Debug" /fastdetect /debug /debugport=com1 /baudrate=115200 變色部分是修改的部分," Microsoft Windows XP Professional - Debug ",這裡加Debug只是讓你在開機的時候方便識別而已,可以隨便寫 上面那行可以直接copy,在大部分的機器都是這樣設定,網路上有人建議,千萬不要自己key,因為會有typo... 重開機後,就會在開機選項看到第二個選項 ...