Social Icons

twitterfacebookgoogle plusrss feedemail
顯示具有 2 學校相關 標籤的文章。 顯示所有文章
顯示具有 2 學校相關 標籤的文章。 顯示所有文章

11/15/2013

[verilog][c] CRC 循環冗餘校驗 實踐

沒有留言:
最近幾位學弟妹在問verilog的作業(QAM 16、QAM256以及CRC),順便也學習寫了一下

CRC的概述我這邊就不說明了,請參考WiKi 或者是這篇文章,在這邊只介紹程式碼。
(不過稍微注意一下維基百科裡面原理是對的,但下面舉的例子有點問題)


CRC 16 的 Verilog 程式碼(P(x) = x16+ x12+ x5+ x0)

module CRC_Unit(BITVAL, BITSTRB, CLEAR, CRC);
   input        BITVAL;                            // Next input bit
   input        BITSTRB;                           // Current bit valid (Clock)
   input        CLEAR;                             // Init CRC value
   output [15:0] CRC;                               // Current output CRC value

   reg    [15:0] CRC;                               // We need output registers
   wire         inv;
   
   assign inv = BITVAL ^ CRC[15];                   // XOR required?
   
   always @(posedge BITSTRB or posedge CLEAR) begin
      if (CLEAR) begin
         CRC = 0;                                  // Init before calculation
         end
      else begin
         CRC[15] = CRC[14];
         CRC[14] = CRC[13];
         CRC[13] = CRC[12];
         CRC[12] = CRC[11] ^ inv;
         CRC[11] = CRC[10];
         CRC[10] = CRC[9];
         CRC[9] = CRC[8];
         CRC[8] = CRC[7];
         CRC[7] = CRC[6];
         CRC[6] = CRC[5];
         CRC[5] = CRC[4] ^ inv;
         CRC[4] = CRC[3];
         CRC[3] = CRC[2];
         CRC[2] = CRC[1];
         CRC[1] = CRC[0];
         CRC[0] = inv;
         end
      end
   
endmodule


11/14/2013

特殊質數數列

沒有留言:
最近很喜歡數列,剛剛在看質數時發現幾個有趣的質數數列,在這邊分享給大家

數列1
33333331這個質數,是可以由左至右依序拿掉一位數,仍然是質數
33333331
3333331
333331
33331
3331
331
31
可惜的333333331(17×19607843) 並不是質數。

數列2
73939133這個質數是可以由右至左依序拿掉一位數,仍然是質數

73939133
7393913
739391
73939
7393
739
73
7

10/15/2013

隨機信號分析課本與解答

沒有留言:
以下解答僅供練習參考!
Probability, Statistics And Random Processes (3rd )



6/11/2013

eclipse使用SWT/Swing Designer 作JAVA視窗程式開發

沒有留言:

eclipse 在開發JAVA swing 或者是AWT程式時,應該很多人都會遇到元件擺放的問題,這時候我們可以安裝SWTDesigner/Swing  Designer 來設計更漂亮的介面

安裝方式:
Help→Install New Software,work with:依照你的版本輸入下面的連結

Eclipse 3.7 (Indigo)
http://dl.google.com/eclipse/inst/d2wbpro/latest/3.7

Eclipse 3.6 (Helios)
http://dl.google.com/eclipse/inst/d2wbpro/latest/3.6

Eclipse 3.5 (Galileo)
http://dl.google.com/eclipse/inst/d2wbpro/latest/3.5
連結來源:https://developers.google.com/java-dev-tools/download-wbpro?hl=zh-CN

5/27/2013

JAVA 網路程式-基本的Client & Server 檔案傳送

沒有留言:
因為有人來問我JAVA版的網路程式要怎麼寫,所以這邊就稍微解釋一下簡單的JAVA檔案傳送!
程式可以用來傳送文字檔、影片檔...等檔案,但是在網路不穩定時會出問題唷~
因為這只是簡單的範例程式,想要更進一步請參考檔案傳送與效能分析
server

client

5/14/2013

檔案傳送與效能分析(1)-實驗過程與結果

沒有留言:



建議切換全螢幕高畫質欣賞~!

本程式在實際網路可以正常執行,為了錄影方便所以才在同一台機器上做測試

看影片可能覺得很簡單...,平常的檔案傳輸都是在穩定的網路下做傳輸,而本程式在不穩定的網路下可以做到大檔傳送、斷線續傳、多工、timeout、pipe、reconnect...等功能...,雖然只是單純的傳送檔案...但寫起來要考慮的東西還真不少....。
影片內容忘記錄多工的部分.... ( 0 . 0)

實驗結果如下,之後有空再對步驟以及程式碼做解釋
(以下圖片點及都可以放大)
62byteTXT文字檔
49.9kb小圖檔(jpg)
1.1Mb大圖檔(jpg)
1014.5Mb壓縮檔(zip)

實驗測試網路環境:
1.都在同一台機器中
2.兩台有線網路
3.一台有線網路 一台無線網路 (此為影片拍測的環境)
4.兩台無線網路



傳輸時百分比進度


傳送文字檔封包分析


4/11/2013

4/02/2013

Netlink 介紹

沒有留言:

Netlink使用標準的socket介面來作為kernel與使用者介面的溝通,其address family填PF_NETLINK,而socket type為SOCK_RAW、SOCK_DGRAM,protocol則根據不同的netlink group不同而有所不同(詳細資訊可以man 7 netlink)。

socket = socket(AF_NETLINK, SOCK_RAW, netlink_family);

Netlink Socket Address Structure
Netlink也需要socket address,其socket address為:
struct sockaddr_nl {

    sa_family_t     nl_family;  /* AF_NETLINK */

    unsigned short  nl_pad;     /* Zero. */

    pid_t           nl_pid;     /* Process ID. */

    __u32           nl_groups;  /* Multicast groups mask. */

};


如果傳送的對象是kernel或者以multicast傳送,則nl_pid設為0。
如果是kernel傳送給user-space上面的application時(multicast),就會填入正確的pid,然而nl_pid實際的意義並不是指PID,而只是用於識別一個netlink socket而已,對於application在建立一個netlink socket時,可以將nl_pid設為0,然後bind(),kernel會自動將PID填入。而nl_groups是用multicast,採用bit mask方式,所以每個netlink family有32個multicast group。

4/01/2013

Arp Spoofing 欺騙攻擊-實作

沒有留言:
上一篇文章講到怎麼查看ARP封包的資訊,現在這邊開始要講一些ARP封包的應用,在開始之前必須聲明一下 本實驗僅供學術實驗用途...請勿拿來打你鄰居阿...

一、步驟:

攻擊者: IP:192.168.136.131 MAC: {0x00, 0x0c, 0x29, 0xab, 0x9a, 0xd7}
被攻擊者:IP: 192.168.136.132 MAC: {0x00, 0x0c, 0x29, 0xd1, 0xab, 0x11}
gateway: IP:192.168.136.2 MAC:{0x00,0x50,0x56,0xf0,0xdd,0x74}

攻擊者發送arp封包給被攻擊者,告知被攻擊者 錯誤的gateway MAC address

二、實驗操作影片


建議切換至HD畫質欣賞

3/31/2013

linux sock raw

沒有留言:

sock_raw可以接收到本機網卡上的數據幀或者數據包,對與監聽網絡的流量和分析是很有作用的.一共可以有3種方式創建這種 socket
1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)
發送接收ip數據包
2.socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))
發送接收以太網數據幀
3.socket(AF_INET, SOCK_PACKET, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))
過時了,不要用啊

PF_PACKET 與 AF_INET 兩個值是相同的,一個主要用在協定,另一個主要用在位址,不過現在比較少人使用AF_INET了

理解一下SOCK_RAW的原理, 比如網卡收到了一個 14+20+8+100+4 的udp的以太網數據幀.
首先,網卡對該數據幀進行硬過濾(根據網卡的模式不同會有不同的動作,如果設置了promisc混雜模式的話,則不做任何過濾直接交給下一層輸 入例程,否則非本機mac或者廣播mac會被直接丟棄).
按照上面的例子,如果成功的話,會進入ip輸入例程.但是在進入ip輸入例程之前,系統會檢查系 統中是否有通過socket(PF_PACKET, SOCK_RAW, ..)創建的套接字.如果有的話並且協議相符,在這個例子中就是需要ETH_P_IP或者ETH_P_ALL類型.系統就給每個這樣的socket接收緩 沖區發送一個數據幀拷貝.然後進入下一步.

ARP spoofing (ARP 欺騙攻擊)-原理

沒有留言:
ARP spoofing(ARP 欺騙攻擊,是針對IPv4的一種攻擊技術。此種攻擊可讓攻擊者取得區域網路上的"資料封包"甚至可"篡改"封包,且可讓網路上特定電腦或所有電腦無法正常連線。


簡單案例分析:
這裡用一個最簡單的案例來說明ARP欺騙的核心步驟。
假設在一個局網裡,只有三台主機A, B, C 而  C是攻擊者。

1.攻擊者聆聽局網上的MAC位址。它只要收到兩台主機洪泛的ARP Request,就可以進行欺騙活動。
2.主機A,B都洪泛了ARP Request.攻擊者現在有了兩台主機的IP、MAC位址,開始攻擊。
3.攻擊者發送一個 ARP Reply給主機B,把此包protocol header 里的sender IP設為A的IP位址, sender mac設為攻擊者自己的MAC位址。
4.主機B收到ARP Reply後,更新它的ARP表,把主機 A的條目 (IP_A, MAC_A)改為(IP_A, MAC_C)。
5.當主機B要發送資料包給主機A時,它根據ARP表來封裝資料包的Link報頭,把目的MAC位址設為MAC_C,而非MAC_A.
6.當交換機收到B發送給A的資料包時,根據此包的目的MAC位址 (MAC_C) 而把資料包轉發給攻擊者C.
7.攻擊者收到資料包後,可以把它存起來後再發送給A,達到偷聽效果。攻擊者也可以篡改資料後才發送資料包給A,造成傷害。

當然今天如果假設A是gateway,則攻擊者C則可以故意不把MAC_A改成MAC_C,改成其它任意的MAC Adress這時候B就會發生不能上網的情形。


Address Resolution Protocol (ARP) 介紹

沒有留言:
最近在寫ARP 攻擊與防禦的程式,在開始之前要先了解一下什麼是ARP!了解後我們就可以撰寫程式攻擊或者針對ARP攻擊做防禦。

ARP(Address Resolution Protocol),ARP的基本功能就是通過目標設備的IP位址,查詢目標設備的MAC地址,以保證通信的順利進行。IPv6中已不再適用,並被ICMPv6取代。
在每台安裝有TCP/IP協議的電腦或路由器裡都有一個ARP緩存表,表裡的IP位址與MAC地址是一對應的,如下表所示。
主機名稱IP位址MAC地址
A192.168.38.1000-AA-00-62-D2-02
B192.168.38.1100-BB-00-62-C2-02
C192.168.38.1200-CC-00-62-C2-02
D192.168.38.1300-DD-00-62-C2-02
E192.168.38.1400-EE-00-62-C2-02
.........
以主機A(192.168.38.10)向主機B(192.168.38.11)發送數據為例。
當發送數據時,主機A會在自己的ARP緩存表中尋找是否有目標IP位址。如果找到了,也就知道了目標MAC地址為(00-BB-00-62-C2-02),直接把目標MAC地址寫入幀裡面發送就可以了;如果在ARP緩存表中沒有找到相對應的IP位址,主機A就會在網路上發送一個廣播(ARP request),目標MAC地址是「FF.FF.FF.FF.FF.FF」,這表示向同一網段內的所有主機發出這樣的詢 問:「192.168.38.11的MAC地址是什麼?」網路上其他主機並不響應ARP詢問,只有主機B接收到這個幀時,才向主機A做出這樣的回應(ARP response):「192.168.38.11的MAC地址是(00-BB-00-62-C2-02)」。 這樣,主機A就知道了主機B的MAC地址,它就可以向主機B發送信息了。同時它還更新了自己的ARP緩存表,下次再向主機B發送信息時,直接從ARP緩存表裡查找就可以了。

3/30/2013

老鼠走迷宮-簡易版

沒有留言:
由於前幾個老鼠走迷宮版本可能對有些人來說可能比較難,所以這邊提供幾個最基本的版本~
不要看到下面一大堆程式碼就嚇到了...我只是把它放在一起而已~~

在提供版本之前先來講解一下老鼠怎麼走迷宮
所有的遊戲地圖基本上都是由矩陣所構成,而矩陣中美一個元素可能代表著不同的意思,下圖試一個迷宮的矩陣,我們可以看到裡面有許多的數字:
其中4表示外牆、3表示內牆、1表示起點、2表示終點而0表示可以走的通道!

當然我們一般在玩遊戲時根本不知道原來地圖是長這樣的,因為這些數字對於玩家來說只會眼花撩亂而已,當電腦只要知道這些數字,再將這些數字利用不同的圖片或者符號印出時,就可以得到我們平常玩遊戲時的場景,比如說下面這張圖:

點圖可放大
這張圖片我只是將剛剛第一張圖片不能走的區域弄成黑色,在經由程式印出,這樣就可以畫出遊戲的迷宮了!!這樣大家有沒有比較有概念了?

老鼠走迷宮-easyx版本

沒有留言:

最近資料結構已經邁入第三個作業了,所以在這邊我也把之前做的東西跟一些參考資料給放上來~
本篇這個版本是使用easyx這套繪圖引擎來幫忙製作的,這套繪圖引擎我很推薦大家使用,主要是因為使用上簡單,而且很適合教學!
程式碼的部分感覺起來好像很長,但其實還好有問題在留言即可~我想程式碼應該很好理解!在這邊說明一下這個程式碼是論壇中某位大大寫的,我再稍微修改一下裡面的內容~

ubuntu 安裝JDK

沒有留言:
ubuntu下如果想要開發android APP、JAVA程式...就必須得安裝JDK,如果只是單純想執行只要安裝JRE即可! 以下就稍微簡單的介紹怎麼安裝JDK

1.下載JDK
請先至 官網 ,選擇自己的linux版本32位元請裝x86  , 64 位元請裝x64下載!

2.創建資料夾,並且將剛剛下載的檔案解壓縮,這邊可以使用以下指令
#sudo mkdir /usr/lib/jvm
#sudo tar -C /usr/lib/jvm -xzf jdk-7u11-linux-x64.tar.gz
     "jdk-7u11-linux-x64.tar.gz" 請改為自己檔案名稱
     可以檢查一下jvm資料夾下使否有jdk1.7的資料夾
 $ls /usr/lib/jvm
3.查看
是否電腦之前已經有安裝過java
$ java -version
The program 'java' can be found in the following packages:
 * default-jre
 * gcj-4.6-jre-headless
 * openjdk-6-jre-headless
 * gcj-4.5-jre-headless
 * openjdk-7-jre-headless
Try: sudo apt-get install <selected package>

     如果出現以上訊息表示java還沒安裝

Ubuntu 使用Eclipse 編譯C/C++程式

沒有留言:
本篇將稍微介紹如何在ubuntu中安裝eclipse 與eclipse CDT來幫助我們開發C程式
步驟如下
1.電腦必須安裝Java Development Kit(JDK) 或者JRE,因為eclipse必須在JAVA環境中執行
2.下載eclipse CDT
直接到eclipse 官網中下載即可
官網:http://www.eclipse.org/cdt/
下載: JUNO版 

3.下載完後解壓縮,接著執行eclipse

4.創建專案>編譯>執行,即可。

整體操作請查看影片,因為最近比較忙所以影片沒有聲音,之後有空會補上

linux C - popen() 開啟其它指令程式

沒有留言:
popen man page 我們可以知道,popen的資訊如下

#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

描述:
popen() 函數使用建立管道的方式, 並使用 shell.  因為管道是被定義成單向的, 所以 type 參數只能定義為 read 或 write, 不能是read/write 兩者同時定義, result stream也只可read或write.

command 參數是一個string pointer, 指向的是一個以null 為結尾的字串,這個字串包含一個shell命令. 這個命令被送到 /bin/sh 以 -c 參數執行,即由shell來執行.

type 參數也是一個指向以null為結尾的string pointer, 這個字串必須是'r'或者'w'來定義是讀還是寫.
popen() 函數的回傳值是一個普通的標準I/O stream,它只能用 pclose() 函數來關閉,而不是fclose().函數.

演算法與資料結構

沒有留言:
演算法與資料結構解說一覽


概論

演算法簡介 - Introduction of Algorithm
資料結構簡介 - Introduction of Data Structure - coming soon...
複雜度分析 - Complexity Analysis
非確定性多項式理論 - Non-deterministic Polynomial Theory - coming soon...
遞迴函式 - Recursive Function


資料結構

堆疊 - Stack
佇列 - Queue
連結串列 - Linked List
樹 - Tree
雜湊表 - Hash Table - coming soon...
這是網路上看到有人整理的文章
裡面解釋的還蠻仔細的 可以參考看看

3/28/2013

[資料結構] 資料搜尋

沒有留言:

字串搜尋
本程式只是一篇範例,用於搜尋文章中的關鍵字
並沒有使用到課本的失敗函數,如果想要加速搜尋請自行修改pmatch函數!
本程式是我教導別人一步一步慢慢寫出來的,可能會有許多問題(參數命名、...等)
但如果想學字串搜尋的人是個可以參考的程式!

當如果會這個程式之後,那麼我們就可以直接使用 strstr 來做字串搜尋!這樣會比較方便一點~ 不過一開始對於寫程式不熟的人來說,最好可以練習一下怎麼重頭自己寫!