Social Icons

twitterfacebookgoogle plusrss feedemail

3/31/2013

抓取網路ARP封包

沒有留言:
點圖可放大
前面幾篇文章談到過Sock_RAW用法ARP介紹以及攻擊防禦方法,在這邊我們要先學習如何抓取封包資訊,這樣我們才能夠去更改封包欄位資訊~!
以下系列文章只用於學術學習,請不要拿來攻擊別人電腦

完整程式碼會在教完作業後發佈上來,這邊稍為介紹一下怎麼抓ARP封包
記得使用root權限執行!
一、步驟:
1.假設自己IP為192.168.1.131
2.假設arp請求發起方的IP為192.168.1.254
3.在自己電腦中開啟程式
4.觀察程式的輸出

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 來做字串搜尋!這樣會比較方便一點~ 不過一開始對於寫程式不熟的人來說,最好可以練習一下怎麼重頭自己寫!

3/25/2013

架站軟體 - WampServer

沒有留言:


WampServer 是一套很簡便的架站軟體,WAMP是代表Windows+Apache+MySQL+PHP,整合了許多架站常用的工具,還內建MySQL管理工具PHPMyAdmin及SqlBuddy等軟體,要在Windows系統上架站並不是難事!

官方網站:WampServer 
介面語言:多國語系
下載連結: 載點1
安裝完成後我們就可以在右下角中查看選單,來進行網站架設。在這邊我就不詳細解釋怎麼使用了,個人是習慣在linux中架設網站...畢竟Windows...恩。

超快棉被換被單

沒有留言:

好神啊!!! 學起來

3/21/2013

WebServer 建置(1)-Apache

沒有留言:
在linux上如何建置WebServer 讓使用者能夠透過瀏覽器(Client),看到網頁呢?方法很多,以下會介紹大概3種方法來架設個人的WebServer

使用已經做好的apache來幫我們建立WebServer

1.Apache
1-1.建置環境 
透過apt-get安裝 apache
sudo apt-get install apache2
或者可以安裝lamp-server
sudo tasksel install lamp-server
    不知道怎麼安裝的話還可以參考此文:
    [Ubuntu]安裝LAMP Server+phpMyAdmin,在自己的電腦輕鬆架網站!

    (只要看第一部分LAMP就可以~)

1-2.開啟網頁測試
在網址列中輸入:127.0.0.1 , localhost或 自己的IP,成功看到It works!的html網頁表示環境建置完成。
註:html網頁在var/www下。

1-3.圖片傳輸
   這是我自己架設的網站,影音圖片基本上一定都沒問題

蘇打綠 sodagreen - 【小時候】

沒有留言:

聽了感觸良多

3/07/2013

隨時提醒自己

沒有留言:


不要做浮躁的嵌入式系統工程師
1. 不要看到別人的回覆,第一句話就說:給個代碼吧!你應該想想為什麼。當你自己想出來再參考別人的提示,你就知道自己和別人思路的差異。

2. 初學者請不要看太多的書那會誤人子弟的。先找一本好書系統的學習。很多人用了很久都是隻對部分功能熟悉而已,不系統還是不夠的。

3. 看幫助。不要因為很難,而自己又是初學者所以就不看;幫助永遠是最好的參考手冊,雖然幫助的文字有時候很難看懂,或不夠直觀。

4. 不要被一些專用詞彙所迷惑;最根本的是先了解最基礎知識。

5. 不要放過任何一個看上去很簡單的小問題--他們往往並不那麼簡單,或者可以引伸出很多知識點;不會舉一反三你就永遠學不會。

6. 知道一點東西,並不能說明你會用,會用是需要實踐經驗和時間積累的。

7. 入門並不難,難的是長期堅持實踐和不遺餘力的學習和實踐。

8. 看再多的書是學不會用的,要多實踐,多動手。

9. 把時髦的技術掛在嘴邊,還不如把基本的技術記在心裡。

10.在任何時刻都不要認為自己手中的書已經足夠了。

11.看得懂的書,請仔細看;看不懂的書,請硬著頭皮看。


12.別指望看第一遍書就能記住和掌握什麼——請看第二遍、第三遍。
13.請把書上的例子親手去實踐一下。

14.把在書中看到的有意義的例子進行擴充;並將其切實的運用到自己的設計中。

15.不要漏掉書中任何一個練習和實例——請全部做完並記錄下思路。

16.別心急,應用確實不容易,水平是在不斷的實踐中完善和發展的。

17.每學到一個知識點的時候,嘗試著對別人講解這個知識點並讓他理解----你能講清楚才說明你真的理解了。

18.記錄下在和別人交流時發現的自己忽視或不理解的知識點。

19.保存好你做過的所有的源文件----那是你最好的積累之一。

20.對於網絡,還是希望大家能多利用一下。很多問題不是非要到論壇來問的,首先你要學會自己找答案,比如google、百度都是很好的搜索引擎,你只要輸入關鍵字就能找到很多相關資料,別老是等待別人給你希望,看的出你平時一定也很懶!

21.到一個論壇,你要學會去看以前的帖子,不要什麼都不看就發帖子問,也許你的問題早就有人問過了,你再問,別人已經不想再重複了,做為初學者,誰也不希望自己的帖子沒人回的。

22.雖然不是打擊初學者,但是這句話還是要說:論壇論壇,就是大家討論的地方,如果你總期望有高手總無償指點你,除非他是你親戚!!討論者,起碼是水平相當的才有討論的說法,如果水平真差距太遠了,連基本操作都需要別人給解答,誰還跟你討論呢。


浮躁的人容易問:我到底該學什麼;----別問,學就對了;
浮躁的人容易問:有錢途嗎;----建議你去搶銀行算了;
浮躁的人容易說:我要中文版!我英文不行!----不行?學呀!
浮躁的人分兩種:只觀望而不學的人;只學而不堅持的人;
浮躁的人永遠不是(也成不了)一個高手。