2011年1月27日 星期四

IPv6入門

IPv6的初步認識

IPv6採用128個bits來定義一個位址,所以在理論值上可以有2的128次方個IP位址可以用,天啊!!那是一個多大的天文數字!! IPv6基本上把前面64個bits當成網段ID,後面64個bits當成Interface ID。有幾個和IPv4不一樣的重點要記住
  • IPv6沒有遮罩值(Submask)
  • IPv6沒有廣播(Broadcast)
  • IPv6不用網路位址轉譯器(NAT)

IPv6設定

128 Bits被分成8個區塊,每一個區塊為16個Bits(即2個Bytes),使用16進位來表示,而且每個區塊之間使用:(冒號)隔開,所以看起來如下
2010: 0000: 0000: 00A2: 0000: AB01: 813D: 01AF
每一個區塊中,前面如果是0可以省略,例如:00A2 可以寫成 A2
如果是連續區塊皆為0,則可以使用::(連續兩個冒號)來表示,例如上面的:0000:0000:可以寫成::。但是這種::(連續兩個冒號)之表示方法在一個位址中只能出現一次。

IPv6首碼(Prefix)

IPv6位址需要定義一個首碼,例如 /3,表示前面3個bits,是固定不變的。很像IPv4的遮罩,但它是不同的意義。

IPv6的位址分類

IPv6分成unicast Address, multicast address, anycast address(取代了broadcast廣播) 這些位址在一台電腦中,是可以同時存在。
  • anycast--可以指派給多個網路卡,每個網路卡傳送anycast時,只傳給距離最近的一個節點。
  • multicast--和IPv4 multicast作用相同,基本定義為 1111 1111 /8,即前面8個bits皆為1,所以看起來以 FF 開頭之位址即是 multicast address。
  • unicast又分成link-local, site-local及Global。
Global unicast是由IANA統一分配,是用來連上Internet的位址,基本定義為 001 /3。意思就是最前面的3個bits固定是001不變,也就是說,以二進位而言,看起來就是如下
0010 0000 0000 0000:(後面7個區塊就省略不列出來囉)
一直到
0011 1111 1111 1111:(後面7個區塊就省略不列出來囉)
所以用16進位表示,看起來就會像 2000:....一直到 3FFF:....。也就是說當你看到只要是 2 或 3 開頭的IPv6位址,是IANA分配的,可以用此位址直接連上Internet。
另一種比較常見的是 link-local address,它很像IPv4的APIPA,但不相同的是,APIPA位址的產生是因為設定DHCP Client(自動取得IP Address),但並沒有被分配到IP Address時,電腦才會產生APIPA位址(例如:169.254.23.3 /16)。IPv6的link-local address則是在網路卡上會自動產生出來,基本定義為 FE80:/10,意思即前面的10個bits要固定為 1111 1110 10,而且其實後面是連接54個0,所以看其來會是 FE80::例如下圖


link-local address 的特性跟APIPA幾乎一樣,只能用在和本身電腦所處的區段之其他電腦相互溝通之用,不可以跨Router,意即不可能用此種位址連上Internet。


轉貼自: http://www.uuu.com.tw/public/content/article/100927tips.htm

忘光光..真頭大...

2011年1月25日 星期二

packet builder

packet builder
可以把透過wireshock之類抓封包軟體儲存的檔案(例如格式為.cap or .pcap)做解析然後一模一樣再送出去的軟體。

說真的,如果不是QA跟我講我還真不知道有這種軟體,而且是free的


Download:http://www.colasoft.com/packet_builder/

2011年1月24日 星期一

使DHCP 重新取得IP

開個.bat檔,把這段貼入,之後點選執行這個bat檔就可以重新向DHCP server註冊個IP


@echo 重新向dhcp的取得ip
ipconfig /release
ipconfig /flushdns
ipconfig /renew
pause


Reference:
http://forum.icst.org.tw/phpbb/viewtopic.php?f=24&t=13340

2011年1月20日 星期四

Non-block Socket:select()

  • What 's socket
    • §Socket is a file descriptor associated with an opened file.
  • Blocking or non-blocking socket:
    • Blocking socket
      • The program is "blocked" until the request for data has been satisfied Socket default behavior
§
    • Non-blocking socket
      • Synchronous I/O Multiplexing
        • select() 




  • Select()
    • select() monitor readfds, writefds, and exceptfds.
    • fd: file descriptor
    • Use socket descriptor for file descriptor.
    • Provide the ability to monitor a set of sockets at the same time
      • Which socket is ready for read
      • Which socket is ready for write
    • Provide multiple sessions 
      • Several clients can access server at the same time
    • Non-blocking
      • Return to process if timer expires

  • Parameters in select()
int select(

int nfds, 

fd_set_t *readSet, 

fd_set_t *writeSet, 
fd_set_t *exSet, 
timeval_t *timeVal



  • nfds
    • Be the highest file descriptor plus one
  • readSet
    • Reflect which file descriptor your selected is ready for reading.
  • writeSet
    • Reflect which file descriptor your selected is ready for writing.
  • exSet
  • timeVal




  • Macro for select()
    • Bind() : FD_ZERO(), FD_SET()
    • Select(): FD_ISSET()
    • Close(): FD_CLR()
  • Sample code for select()


Reference:


2011年1月17日 星期一

FTP port 20 ? port 21?

TCP 的連線中在 Client 及 Server 端各會有一個 Port Number
在 Client 端一般是隨機指定的,而 Server 端則看服務而定,一般不會變動

FTP 的通訊協定比較複雜一點,詳細資料可以參考 http://rfc.giga.net.tw/rfc959

我這邊簡單解釋一下:

FTP 通訊協定在伺服器端可能會使用到 TCP Port 20 及 TCP Port 21 (這可以改的)
TCP Port 21 主要用來傳送命令,TCP Port 20 則用來傳送檔案/資料
如果你的 FTP Server 不是跑在 Port 21,
那麼 Data Port 一般會跑在 command port 減 1 的位置

FTP 有兩種運作模式,一個是 active (主動) 一個是 passive (被動)
這裡的主動與被動的定義是相對於伺服器的角色而言的

而 Port 20 只會用在主動模式下

在主動模式狀況下
Client 首先連接到 FTP Server 的 TCP Port 21,
告訴 FTP Server 他要抓一個檔案,然後這時候 Client 要送出一個訊息,
告訴伺服器他會在那個 TCP Port (隨機指定)等著接收這個檔案,
然後伺服器會經由自己的 Port 20 主動建立一條連線到 Client 端的這個 Port 上面,
藉由此連線把檔案傳送給 Client 端

在被動模式狀況下
Client 首先連接到 FTP Server 的 TCP Port 21,並指明要採用 Passive 模式,
接著告訴 FTP Server 他要抓一個檔案,
這時候伺服器會送出一個訊息,告訴 Client 說已經把檔案準備好放在某個 TCP Port (隨機指定) 上面,
由 Client 端自行建立一條連線到 Server 的這個 TCP Port 來把檔案傳送回去

綜合以上所述,如果你的服務是跑在 TCP port 21,且使用主動模式,
那麼照道理來講,伺服器端連接出去送資料應該要使用 Port 20 才對

你要不要說明一下伺服器端的環境,
然後看看能不能把 Client 端的連線過程記錄貼上來看看
(例如 CuteFTP 連線時會有個小視窗看到一堆命令)

有一個可能是因為伺服器的設定問題導致的

這邊有一份文件詳細說明 FTP data-port 的運作模式,很值得你參考 (英文的)

http://slacksite.com/other/ftp.html







轉貼自: http://www.pczone.com.tw/vbb3/thread/47/117740/

FTP 指令 (DOS)

FTP 命令: (後面有詳細說明內容) 
ftp的命令行格式為:
ftp -v -d -i -n -g[主機名] -v 顯示遠程服務器的所有響應信息。
-d 使用調試方式。 
-n 限制ftp的自動登錄,即不使用.netrc文件。
-g 取消全局文件名。 
help [命令] 或 ?[命令] 查看命令說明 
bye 或 quit 終止主機FTP進程,並退出FTP管理方式. 
pwd 列出當前遠端主機目錄 
put 或 send 本地文件名 [上傳到主機上的文件名] 將本地一個文件傳送至遠端主機中 
get 或 recv [遠程主機文件名] [下載到本地後的文件名] 從遠端主機中傳送至本地主機中 
mget [remote-files] 從遠端主機接收一批文件至本地主機 
mput local-files 將本地主機中一批文件傳送至遠端主機 
dir 或 ls [remote-directory] [local-file] 列出當前遠端主機目錄中的文件.如果有本地文件,就將結果寫至本地文件 
ascii 設定以ASCII方式傳送文件(缺省值) 
bin 或 image 設定以二進制方式傳送文件 
bell 每完成一次文件傳送,報警提示 
cdup 返回上一級目錄 
close 中斷與遠程服務器的ftp會話(與open對應) 
open host[port] 建立指定ftp服務器連接,可指定連接端口 
delete 刪除遠端主機中的文件 
mdelete [remote-files] 刪除一批文件 
mkdir directory-name 在遠端主機中建立目錄 
rename [from] [to] 改變遠端主機中的文件名 
rmdir directory-name 刪除遠端主機中的目錄 
status 顯示當前FTP的狀態 
system 顯示遠端主機系統類型 
user user-name [password] [account] 重新以別的用戶名登錄遠端主機 
open host [port] 重新建立一個新的連接 
prompt 交互提示模式 
macdef 定義宏命令 
lcd 改變當前本地主機的工作目錄,如果缺省,就轉到當前用戶的HOME目錄 
chmod 改變遠端主機的文件權限 
case 當為ON時,用MGET命令拷貝的文件名到本地機器中,全部轉換為小寫字母 
cd remote-dir 進入遠程主機目錄 
cdup 進入遠程主機目錄的父目錄 





Reference:
http://hack.org.tw/isfourm/viewthread.php?tid=58