2013/11/29

[OpenVPN GUI] Server及Client設定

OpenVPN GUI是一套簡單好操作的設定軟體,來讓電腦可以透過虛擬的VPN網域來上網。對於常出差的朋友們來說,能夠利用VPN來上一些被擋掉的網站,也是挺方便的!

OpenVPN的下載網址
注意下載的時候要注意電腦是32位元還是64位元的系統,如果是64位元建議到以下網站下載
http://openvpn.se/download.html
另一個下載地址
http://openvpn.net/

原因是因為一開始架設的時候採用http://openvpn.net/下載的檔案,在32位元的電腦上架client沒有問題,但是64位元的server端一直架不起來,發現Error訊息如下


Wed Nov 27 19:03:25 2013 CreateFile failed on TAP device: \\.\Global\{498541F0-8CBD-4231-8F00-F9F4F2152179}.tap
Wed Nov 27 19:03:25 2013 All TAP-Win32 adapters on this system are currently in use.
Wed Nov 27 19:03:25 2013 Exiting

會發現OpenVPN建立的虛擬網卡TAP device架不起來,Google一下才知道是位元版本有問題,因此64位元的作業系統請按這裡下載,避免OpenVPN架設失敗。


2013/11/28

[jQuery] Object和Array的不同及應用

寫網頁常常會需要在表格中列出大量相似的資料,這時候array和object就很好用。

array與一般的程式語言相同,擁有index及value,只要輸入index值,就可以得到存放在array之中的value;而object也類似,但不同的點在於,object有所謂的key及value,可以自己定義存放在object中的value的key是什麼,輸入這個key就可以得到相對應的值。


2013/11/22

[JAVA] Socket網路server/client文字傳輸程式

想要練習對程式語言的各種應用熟悉程度,像是檔案I/O、執行緒、網路Socket還有程式介面,最快速的方式就是寫一個類似MSN的文字傳輸程式。既可以綜合練習到以上的部分,還可以藉由撰寫的過程中,更加了解程式語言。

JAVA也不例外,物件程式導向的程式語言,筆者對此一直還懵懵懂懂,但透過撰寫這個程式,對於類別架構、Socket還有AWT(Abstract Window Toolkit)物件的應用,更有不同的心得。


2013/11/18

[Wi-Fi] IEEE 802.11 a/b/g/n/ac 有什麼差別?

在市面上的行動通訊產品,常常會看到IEEE 802.11 a/b/g/n 或者 IEEE 802.11 ac的規格,但這幾種規格到底有什麼差異呢?

Wi-Fi使用的radio frequency頻段為2.4GHz或者5GHz,簡單整理成下表:
Protocol
Frequency
Max PHY Rate
Inside
Outside
Legacy
2.4-2.5GHz
2Mbps
-
-
802.11a
5.15-5.35GHz
5.47-5.725GHz
5.725-5.875GHz
54Mbps
30m
45m
802.11b
2.4-2.5GHz
11Mbps
30m
100m
802.11g
2.4-2.5GHz
54Mbps
30m
100m
802.11n
2.4 / 5GHz
150Mbps(40MHz * 1MIMO)
600Mbps(40MHz * 4MIMO)
70m
250m
802.11ac
5GHz
200Mbps(40MHz * 1MIMO)
433.3Mbps(80MHz * 1MIMO)
866.7Mbps(160MHz * 1MIMO)
35m


其中 IEEE 802.11b/g 為2.4GHz的RF頻段,802.11g為802.11b的升級版,最大PHY rate從11Mbps提升到了54Mbps;IEEE 802.11a為5GHz頻段,最大PHY rate為54Mbps。所使用的channel頻寬都是20MHz。

2013/11/15

[Iperf] 簡單測試網路效能

想要測試無線網路、有線網路的效能,可以簡單透過iperf這個工具來測試。
可以從Iperf下載iperf到電腦,windows / linux / Mac都可以使用。

設定的方式,首先先確認兩台測試的電腦在同一個區域網段之下或者能夠透過預設閘道或路由器去連線到不同網域的電腦。可以用ping來測試兩台電腦之間的連線。

iperf 簡介
--------------------------------------------------------
-s    server 模式
-c    client 模式
-w    TCP windows設定
-t    測試總時間(秒)
-i    每隔幾秒show速度在cmd視窗上
--------------------------------------------------------


2013/11/14

[Wi-Fi] Wi-Fi 無線網路頻段、OperatingChannelBandwidth & ExtensionChannel

Wi-Fi是透過2.4GHz或者5GHzRF信號做傳輸資料,當然有頻段就會有干擾的問題,尤其如果是身處在到處有Wi-Fi設備的都市,使用上就會影響到速度。因此,常常會聽到人家說channels要設定在1611頻道,這樣才不會有干擾,為什麼呢?

2013/11/11

[Linux] 用CFLAGS -D來定義Makefile中global變數

在Linux編譯的時候,常常會需要讓程式去辨認一些變數,像是目前版本、或者自己定義的一些功能項目,所以.c檔會需要從Makefile那邊得到一些變數來做判斷。

利用CFLAGS -D來定義巨集變數,經過編譯之後,就可以在.c檔案中使用此定義巨集來做判斷。

# Makefile
CC = gcc
RM = rm

CFLAGS += -DTest

TARGETS := myapp

$(TARGETS): main.c
 $(CC) $(CFLAGS) $< -o $@

clean:
 -$(RM) -f *.o
 -$(RM) -f $(TARGETS)

$@:指的是編譯的目標檔,也就是$(TARGETS)的myapp
$<:指的是目前的相依檔,也就是$(TARGETS)後面的main.c,意思是若要編譯$(TARGETS),則必須先把main.c編譯


2013/11/10

[JAVA] 使用FileReader / FileWriter寫出亂數小寫字母字串檔案

使用JAVA來做檔案IO,透過FileReader和FileWriter就可以達成,搭配緩衝區BufferedReader和BufferedWriter更可以增加檔案IO的效率。

透過亂數產生100個小寫字母,並用FileWriter和BufferedWriter寫入至"rand_letters.txt"檔案中,然後再用FileReader和BufferedReader讀入並顯示在電腦螢幕上。以下為參考程式碼:


2013/11/09

[JAVA] 使用FileInputStream&FileOutputStream讀取寫入二進制檔案

JAVA跟C在檔案IO部分有些不同,C只要在fopen()函數中設定"r"或者"rb"就可以讀取一般文字檔或者是二進制檔案。而JAVA,要讀取二進制檔案就一定得用以下兩個method來實作。

Constructors
FileInputStream(File file)
創造一個讀入檔案file

Methods
int available()
回傳估計檔案的長度
int read(byte[] b)
讀取檔案內容至b的byte陣列中
void close()
關閉讀入檔案

Constructors
FileOutputStream(File file)
創造一個寫入檔案file

Methods
void write(byte[] b)
寫入b的byte陣列資料到檔案中
void close()
關閉寫出檔案


2013/11/07

[OpenSSL] Encrypted Digest加密摘要計算

在數位簽章的傳輸架構下,傳送方必須傳送檔案的明文以及Encrypted Digest(加密摘要)給接收方,接收方得到檔案之後,會用plaintext(明文)來計算的摘要訊息,以及用RSA公鑰來解密Encrypted Digest,進而比較兩者之間是否有不同,來確認檔案是否有被改寫過。底下為整個架構圖,UserA會把plaintext利用hash()計算出message digest,然後使用private key加密之後變成encrypted digest;接著把plaintext和encrypted digest傳送給UserB,UserB接收到之後,會把encrypted digest使用UserA的public key作解密,和接收到的plaintext代進hash()計算出來的message digest做比較,看看檔案是否有遭到竄改或者接收錯誤。




OpenSSL是怎麼來計算Encrypted Digest呢?做法是把驗證屬性(Authenticate Attributes)的部分,不包含格式前面的OID,然後把第一個byte改成0x31帶進去,利用RSA私鑰加密,就可以得到Encrypted Digest。也就是說,會影響Encrypted Digest結果的包含了contentsigning time以及message digest

2013/11/06

[OpenSSL] S/MIME數位簽章範例

使用OpenSSL的S/MIME來做數位簽章,得到三個不同簽章格式的結果(SMIME、PEM和DER)。
OpenSSL網站參考http://www.openssl.org/

舉例如下:
簽章檔案
Sign.txt
------------------------------檔案內容-----------------------------------
Content-type: text/plain

Test OpenSSL Signed Content
------------------------------檔案內容-----------------------------------


[OpenSSL] 數位簽章格式(SMIME, PEM and DER)

基於X.509和PKCS#7之下的數位簽章檔案有三個格式,分別是SMIME(Secure Multipurpose Internet Mail Extensions)、PEM(Privacy Enhanced Mail)和DER三種格式,SMIME會把整個簽章檔案內容以及簽章base64編碼的數據做為輸出內容;而PEM則是只有base64編碼的部分。
什麼是base64呢?簡單來說,在MIME格式的email中,將binary轉成ASCII的一種方法,把原本的二進制取6個bit為一個單位,用大寫字母(26個)、小寫字母(26個)、0~9(10個)和加除號"+ /"(2個),總共64個(26+26+10+2=64),基於這64個字元的編碼方式,可以簡單地做文字的加密。


2013/11/05

[軟體分享] CRC32、SHA1、MD5驗證碼檢測工具 HashMyFiles

網路上傳輸檔案,或者是OpenSSL加密傳輸,常會看到CRC32、SHA1或者MD5的驗證碼,在自己撰寫或開發軟體時候,有時候會不確定計算出來的驗證碼是否正確,因此可以使用HashMyFiles這個免費的小軟體來幫助驗證,其實挺方便的。

官方網站:http://www.nirsoft.net/utils/hash_my_files.html
下載:按此下載
版本:v2.01

舉例來說
假設要計算這個txt檔的驗證碼。


2013/11/02

[MATLAB] 用CSV讀檔分析財務報表

MATLAB是個很方便的工具,尤其可以讀入CSV檔,來分析大量的資料,甚至可以替我們塞選出前幾排名的資料。

利用 csvread函數來達到此功能
M = csvread(filename)
M = csvread(filename,row,col)
M = csvread(filename,row,col,csvRange)

以下以財務報表來舉例,首先去公開資訊觀測站下載上市公司102年Q2的綜合損益表的CSV檔案,然後透過MATLAB來分析毛利率、營業利益率以及淨利率,選擇營業收入在$100,000,000以上的公司,挑選出各前10名作為代表。如下圖