星期四, 6月 30, 2005

亞馬遜書店中文站

http://www.ebooktw.com/

地址中翻英

http://www.post.gov.tw/post/internet/f_searchzone/index.jsp?ID=190103

Vistapoint & Echo Cancellation

詮鼎科技 曾益祥 Simon Tseng simon.tseng@aitinc.com.tw
02-8797-6866 ext:8302

Vistapoint 黎先生 edwardlee@vistapoint.com.tw ext 101

產品: Echo Cancellation IC

用在speaker phone上,因為speaker phone的speaker和mic距離很近,所以echo的效果很強。
這一類產品的know how舊在echo cancellation上。

echo有兩種結果:
  1. delay太長,導致說話者會在一段時間後聽到自己說的話。規定delay超過150 ms的echo就不及格。
  2. loop gain太大,導致蕭叫聲。
第二點可以由調整gain職解決。第一點就要靠電路,以往都是用OP作一個filter,但是效果不好,vistapoint利用dsp來作,dsp由 speaker端讀入資料,作為處理mic端信號的依據。(也就是說”依據speaker的信號刪除mic輸入信號中相同的波形,達到echo cancellation)

但是dsp讀入的是未經speaker轉換成聲波的信號,而實際上由mic引入的是經果speaker撥放的 聲音,所以波形會有很大的不同, edward.lee說該dsp晶片要能動作得好,speaker的THD(Total Harmonic Distortion)要< 1%。還有頻率響應在300Hz~3.4kHz間要平坦(3.4以上 don't care,300以下要衰減)。

設計speakerphone產品大部分要注意的還是外觀設計,mic和speaker不可以太近,還要注意mic經由音箱內部收到的speaker聲波。edwared.lee說最佳的方法是在mic或speaker後方填充黏土(其效果較silicon好)。

在這些機構設計問題,vistapoint願意加入設計,提供意見,以確保dsp能達到最好的效果。

echo cancellation dsp在有些情況還是不能工作得很好,例如使用在conference room時,說話者的距離很遠,所以mic收取的signal很小,speaker音量很大,mic收進的speaker音量遠較說話者的音量大很多,這 樣echo cancellation的效果會不好。碰到這樣的時候,就會採用單工方式,當偵測到speaker有valid的聲音信號時,將mic關閉。

vistapoint 目前只有作echo cancellation的dsp,主要在取代以往用OP filter的功能,讓體積和效果更好,一科單價大約4. 並沒有加入Voice Codec的功能。因為這部分TI已經作得很好,拼不過,也沒必要。國內民生科技也做得不錯。
下圖是VOIP Speakerphone的應用VP0307示意圖:

可以看到VP0307從speaker(偷)讀入信號,將mic信號率波,再送給主控mcu。mcu將資mic資料壓縮G.7xx送到internet上。

VP0307提供的interface有I2S,2 channel AD,2 channel DA,SPI,2 UART。

vistapoint另有VP0501 (05)產品線,作car kit應用,整合了BT,還有Speech Recognition和memory card interface (錄音用)。

AIT提供另一種應用:BT cell phone via VOIP/PSTN
Speakerphone內建BT以後,cellphone如果有BT功能,可以經由speakerphone撥PSTN或IP phone,不需要經由GSM網路。適用在公司內部。

星期三, 6月 29, 2005

LPC : Linear Prediction Coding

一般用在語音的壓縮方式,
他是建立在以下的語音發聲model上:
一個在tube一端的buzzer。
利用這個model,分析語音,設法找出buzzer的freq, intensity兩個參數。
假設只需要這兩個參數(function of (t)),就可以藉由這個tube-buzzer model重製出語音。

這兩個時間的參數就叫做 residule。

http://www.data-compression.com/speech.shtml

google : speech lpc

Blogger New Tools : upload image button.


和用Hello upload的目錄位置不一樣(server位置一樣),Blogger button在 "blogger"
hello的話會在"img"

VOIP Codec : iLBC

iLBC (Internet Low Bitrate Codec)是free speech codec,用在VOIP。
設計使用在窄頻的網路環境。
frame length 30ms時bitrate是13.33 Kbps.
frame length 20ms時bitrate是15.20 Kbps.
針對packet (frame) lost設計。
Basic Quailty約等於G.729A。
計算複雜度約等於G.729A
Royalty Free。

Voice Codec Standard..

Standard
Description
Data Rate (Kbps)
Delay (ms)
MOS
G.711
Pulse Code Modulation (PCM)
64
0.125
4.4
G.721, G.723, G.726
Adaptive Differential PCM (ADPCM)
16, 24, 32, 40
0.125
4.2
G.728
Low-Delay Code Excited Linear Prediction (LD-CELP)
16
2.5
4.2
G.729
Conjugate-Structure Algebraic CELP (CS-CELP)
8
10
4.2
G.723.1
Another CS-ACELP codec
5.3 & 6.3
30
3.5 & 3.98


MOS 是Voice Quality的指標

NASA :Word Wind , 地球遊覽軟體


...
很有趣,就像有一個地球儀在手邊,可以zoom in到很細,表面是立體。可以控制視角。

MCS51 8051 Timer0 Sample Code

12MHz Crystal,P1.1接LED,以下的code每1sec亮/滅 led一次。

#include

bit st;
int cnt=0;

void tmr0(void) interrupt 1 {
TH0 = (8192-5000)/32;
TL0 = (8192-5000)%32;

cnt++;
if(cnt==200){
cnt=0;
st = !st;
if(st)
P1=0x02;
else
P1=0x00;
}
}

void main(void)
{
TMOD=0x00;
TH0=(8192-5000)/32;
TL0=(8192-5000)%32;
IE=0x82;
TR0=1;
while(1);
}

MCS51 8051 Use the Timer

Timer 0,Mode0 : 13 bit counter, not auto reload
clock source可選擇internal crystal (freq/12)或是external trigger (Pin: T0).

TMOD Reg (Not bit addressable)

bit 0 - 3 control Timer0
  • bit 0 : M0 (w M1, mode select)
  • bit 1 : M1 ( --)
  • bit 2 : C/T (Counter or Timer ? Select clock source)
  • bit 3 : GATE, Timer controllerd by Pin: INT0 ?
bit 4 - 7 are the same as bit 0 - 3, but used to control Timer1

TCON Reg ( bit addressable)
  • bit 0 : IT0, external interupt 0 pin, trigger mode (rising or falling )
  • bit 1 : IE0, external interrupt 0 pin (INT0) enable
  • bit 2 : IT1, external interrupt 1 pin, trigger mode (rising or falling )
  • bit 3 : IE1, external interrupt 1 pin (INT1) enable
  • bit 4 : TR0, Timer 0 enable
  • bit 5 : TF0, Timer 0 overflow flag
  • bit 6 : TR1, Timer 1 enable
  • bit 7 : TF1, Timer 1 overflow flag
TH0.TL0 Reg (Counter Register)
  • TH0 使用8 bit,代表13bit counter的hi 8 bits
  • TL0使用5 bits,代表13bit counter的lo 5 bits
一般的設定code是 (在main)
TH0 = value/32;
TL0 = value%32;Crystal = 12MHz.
因為timer用overflow trigger,所以value = (8192-要counter的次數)。

Example : 使用Timer0 作 5 ms的timer count。

TMOD = 0x00; //Mode0, C/T 0: use internal, GATE 0: no relation w INT0
TH0=(8192-5000)/32;
TL0=(8192-5000)%32;
IE = 0x82; // enable interrupt
TR0=1; // start gtimer

interrupt function

void tmr5ms(void) interrupt 1
{
TH0=5000/32;
TL0=5000%32;

tmrcounter ++;
}

Flash Icon Design

小型系統上,LCD, LED Flash功能實作:
  1. 一個Global Flag由Timer定時的toggle狀態。
  2. 每一個icon都有一個updatelcd method,其中依據icon function,Flash enable/disable和Global Flag來Set On/Off icon.
  3. mainloop中有一個update lcd的section,將所有icon的updatelcd method執行一次
  4. mailloop較長,有需要即時update時,可以在需要的地方直接呼叫該icon的updatlcd method.
這個方法浪費執行時間,如果不希望浪費,每個icon又需要增加一個variable紀錄目前icon的state,節省reflash的時間==>浪費space。

採用dirty code,通心麵程式,在需要的時候update,並且確保每次會執行到(state machine),再執行時依照目前Global Flag狀態set on/off flag,這樣節省執行時間(不執行不需要的code),節省space(不需要額外的variable來記錄),但是因為要寫state machine,所以code size會增加,code structure也不好,不易瞭解和mantain。

所以?

星期二, 6月 28, 2005

作keyboard,button detection 要注意的事

  1. 要考慮是否需要multi-key (同時按下多按鍵的偵測)。
  2. 需不需要持續按鍵的偵測,還是以”按下-放開”計算。
  3. Noise : 需要確認,避免Noise干擾造成誤偵測。
  4. Noise : 避免確認過長造成反映遲鈍。

wxWidget/wxPython 2.6.1 is out

安裝一下:
先要install python 2.4
到sourceforge download wxPython2.6 for win32 version.
安裝boa : wxPython GUI constructor
啟動boa (boa本身是一個python script,所以要用python啟動)。
出現
wx._core.PyNoAppError: the wx.App object must be created first.

google : boa wx.app object must be created first

有一篇說明要使用wxPython 2.6,Boa要用 CVS上的0.6版

星期五, 6月 24, 2005

原來Apple port to x86已經不是第一次了

LowEndMac看到的新聞:

Steve Jobs離開Apple,變成Scully當家,1992年MS release Windows 3.1。
Novell害怕Windows會影響他在PC network No1的地位。所以拉攏Apple將MacOS porting到x86。

Scully也覺得Apple應該脫離hardware,成為一個more software的公司,所以找了一堆RD,將MacOS porting 到486,這個OS專案名稱叫Star Trek,Intel的總裁也怕MS,所以也這祝福這個Project能成功。

這 個工作並不容易,因位當初MacOS為了要run的快,右節省disk space,很多程式都是用assembly寫的,而且都是手工最佳化,所以要porting到x86是很困難的事,Application的user interface部分則比較容易,因為大多適用PASCAL寫的。

其他還有很多困難的地方,像MAC的Software非常依賴 boot ROM,有很多code都寫在ROM理,而要位x86再開一個ROM的花費實在太大,所以x86的MacOS就使用軟體的方式:再開機時將ROM image load近來(這就是後來iMac的做法)。

1992, December, 1st。 Project完成,工程師們除了基本的MacOS外,還porting好了QuickTime和QuickDraw。但很不幸的Scully在 Prioject完成的中途就離開了,Apple變成Spindler當家,他對x86 port沒興趣,比較對下一版的MacOS有興趣,所以他把所有的工程師都抓到System 7的專案中。Star Trek計劃終止。
之後一直到Apple買下NeXT,Apple的軟體都無法在x86的機器上執行。(NeXT是x86的機器)。

2005年 Steve Jobs宣佈Mac OSX 要port到x86了,而且從OSX剛開始開發時,就已經這樣作。


? 會不會又換了老闆?OSX on x86又胎死腹中

memo : 要帶的東西

  • 體檢表
  • 離職證明
  • 保證書

MCS51 8051 52 Serial Mode0 Read procedure

很少有人提到的51 serial port用mode 0來收送的功能:
這個mode (mode 0),利用TX pin送出固定Xtal/12的clock,利用程式來從RX 收/送 串列資料。

這樣的工作模式通常是用來配合shit-register (也就是串轉並/並轉串)的chip作IO擴充,當然,也有一些AD是用這種工作模式:如Microchip : MCP3201,在AN702中有說明。

要用Mode 0作送的動作:

SCON = 0; // Mode 0, SM0=SM1=0; disable REN
SBUF=data; // send data out, send clk at the same time
while(!TI); // wait complete

要用Mode 0作收的動作

SCON = 0x10; // Mode0, REN - enable receive function , RI=0 = send clk
while(!RI); // wait receive
data = SBUF;

RI=0; // SCON.0 :RI =0 , send clk out
while(!RI); // wait receive
data=SBUF;

當然要注意的是,通常都會用一個pin街道shit register,作chip select,有些是rising edge trigger,有些是falling trigger。

如果分開用bit addressing:
READ:

RI=0;
REN=1;
while(!RI);
return SBUF;

RI要手動clear,又因為REN一但set後clock就送出,所以RI要先clear才可以set REN。

名詞解釋:PBX (Private Branch Exchange )

可是還是不知道是幹什麼的

All The Open Source Voip Programs

http://www.voip-info.org/wiki-Open+Source+VOIP+Software
包含Server和Client和Codec。
當然也包含commercial

Jedi 安裝的Firefox extension,,會定時更新喔

http://jedi.org/p4/FireFox/ExtensionsList.html
因為extension太多了,所以從這裡來看,比較方便。

星期四, 6月 23, 2005

Voip : Voice Quality

IP Phone要提供Voice Quality的數據,這是依照P.8XX的ETSI規範側出來的。通常分數要是3.0才可以。
PESQ
測試儀器會內含一個SIP server,向待側設備撥號,接通後送出標準測試聲波(有男聲,女聲和各國的標準聲波,follow ETSI規定),測試機器會有一個RJ22 (電話筒)的街頭,插入IP Phone的Phone Jack,取出IP Phone decode後的聲波,以此和輸入波形比對,算出Voice Quality。

K2000
Optima (?)

UNDO ? SIP Server ?

星期三, 6月 22, 2005

Cacheable vs Non-Cacbeavke Access

Embedded System的Cache並不是”透明”的,也就是說,programmer可以分開處理cache和memory。

XXX Chip的DRAM分成cacheable和non-cacheable兩個region.每個chip selection都會佔據兩個region : cacheable, non-cacheable.白話一點說,就是有兩個memory address region都會對應到同一塊memory,但是一個memory region是透過cache,一個不是。
他是利用Address 28來區分二者(偉大,可以cache整個區域?)。

實際上內部只有16K的cache

使用cacheable區域的好處:
  1. non-cacheable的access一定要以int為單位(32 bit)。這在read來OK,但是在write時就比較麻煩,所以作byte-wirite時,可以寫入cacheable regsion.
  2. 如果資料已經在cache裡,read cacheable region會比none-cacheable region快(但是若是不在cache裡,要invalidate cache再update cache就慢了)。

使用None-cacheable區域的好處:
  1. DMA動作沒有和cache同步(也就是說不會觸發invalidate cache)。
  2. 太多寫入cache的動作會導致cache不斷要update,反而慢,所以不重要的就對None-cacheable操作。

補充:
Cache 內部會區分成很多小區域,有一個lookup table,表示每個”小區域”對應到真正memory的位址。當cache內容和memory內容不一致,而有人要作read時,就會引發 invalidate cache,cache作update動作,將cache和memory內容同步。

Greate : 有人在預測未來

這是這一期今周刊的電子報節錄:這位老闆是押在行動通訊上喔。

黃仁勳在描述繪圖晶片市場時充滿希望,並鐵口直斷 ,在未來五年之內,手機加第三代行動技術加上無線上網(Wi-Fi)及繪圖晶片技術,一定會讓電子產業重新起來,這些一起發酵,結果就會像當年網際網路與PC產生一樣的「OVERNIGHT SUCCESS」(瞬間爆發力)。

他說,現在的手機就像一九八○年初的PC,當時的PC只是單純看資料的終端機,完全沒有處理資料的能力,但有誰想到在二十世紀結束之前,PC在網路的帶領下,會變成改變人類生活的發明?現在的行動電話,就算最先進的手機,除了接聽電話沒有任何的功能,假如要用手機下載一個Java遊戲軟體,你敢嗎?就像九○年代初期的個人電腦一樣,如果你在九○年代初期把一個光碟機裝到電腦上,恐怕電腦就會掛了,大多數的使用者根本不敢用,現在的手機就是這樣的情形。不只手機數位相機,掌上遊戲機都不夠好呀!

他相信,在五年內,無論是服務、晶片製作技術、內容及無線技術一定會有十倍速以上的成長,一定會改變。「有點耐心一定等得到」。

網 際網路與PC有點像every ready,只需要開始反應的碰撞而已。因為當時PC工業已經很”堪用”,而網際網路的技術也沒有瓶頸,只是訂立規範,所以其實要並沒有屏障存在。PC和 網際網路的發展,可以看到hardware技術佔極小部分,大部分的內容都是人的創意加上軟體的工作。也因為如此,他的發展才會沒有限制的爆炸開來。

現在的行動技術,缺的應該是電力吧,大LCD,快速CPU讓手機的使用時間月來月短,導致手機上的電池越來越大。如果有一個像SteamBoy一樣,超能量密度的energy ball。那將G5放在手機上也沒問題(不過打電話時就像吹吹風機一樣了)。

這個我有點意見,電腦初期只有計算資料的能力,他”展現”資料的能力是很差的,電腦設計的目的其實就只是為了計算,最古老電腦,還是用card輸入,用報表輸出。

星期二, 6月 21, 2005

如何開始你的VoIP產品事業發展部

如何開始你的VoIP產品事業發展部

興翰科技VIDA 王榮宗 總經理 (對,就是王榮宗)

2005/07/09起,每星期(六),共三週,9:00 ~ 17:00

台北市信義路三段153號3樓(大安捷運站斜對面)

02-27075156分機2282 楊小姐 PYYang@tcfst.org.tw
車子可停放於 :
■ 台北市農會特約停車場(復興南路一段340巷,仁愛路與復興南路口,福華飯店後方)
至本棟大樓警衛室加蓋停車證明章,可以1小時30元優惠價格停車(未蓋章者1小時50元)
■ 信義路三段路邊停車
限時停車,1小時約40元
■ 建國南路橋下停車場、大安森林公園地下停車場
 1小時約20元
■ 大安高工停車場
1小時30元






7/30以前要請款!繳交
  1. 上課講義
  2. 心得
  3. 發票
OK,7/27 完畢
心得:
內容

市場

1. VOIP的原理基礎與傳統PSTN的比較。

2. 目前市場上IP Telephone的幾種產品與營運模式。

3. IP Telephone的難處

4. IP Telephone的遠景

產品設計

1. IP 電話的產品分類

2. 設計時需要考慮的因素

3. Cisco IP Phone的產品分析

Wifi Phone 的設計

IP Phone如何穿越防火牆

工作啟發

VOIP已經發展了6,7年,技術已經到了成熟的階段,由於寬頻網路的大量建設,目前應該是IP電話普及的時機。

IP 電話的許多高階應用均與電信營運商相關,IP電話的節費特性在電信費率低的國家不具吸引力。所以單純的IP電話產品如果不與電信營運商合作,很難獲利。

IP電話除了很多地方需要電信業者的協助,要作IP電話的服務還受到電信法規的限制。有些功能(911 call)目前仍難做到。

另一種方線來看,從Skype (p2P IM)所得到的啟發,如果單純的以語音通訊為目的,不要達到電信營運的規模,或許是另一種VOIP能夠獲利的VOIP商品。

隨著各種VOIP協定的制定與開放,VOIP裝置將能互通,VOIP裝置也會越來越普及,VOIP將不會是單一商品,而是所有網路裝置的Value Add。

行動方案

1. VOIP的技術仍持續發展中,要知道哪一種協定成為目前的首選。

2. 設計IP 電話時需要注意的問題。

3. 注意目前用戶量最高的VOIP產品:skype,是否有embedded solution發行,合作的方式。

4. 規劃IP telephone產品時,可行與不可行的產品方案。

另一個版本:

VOIP課程心得報告

iP 電話與傳統PSTN電話的比較

PSTN的網路架構是專線,也就是通話的兩端需要一條專有的線路,無論雙方有無通話,這條線路都不能為其他通話所用。IP電話採用封包傳送,所以在多通話端可以共用線路,所以硬體利用率較高。

PSTN電話由於國際電話線路(海底電纜,衛星)昂貴,而且其電路專用的特性導致通話費率高。IP電話網路利用現有網路線路,與資料線路共用線路,而且不佔用電路的特性讓通話費率降低。

目前IP電話的營運模式

Gateway provider : 提供一般電話到網路的gateway,將一般電話轉到網路上。用乎需要具有寬頻連線能力(申請寬頻),用戶購買這個gateway後接上傳統電話機就可以打電話到同樣有這個gateway的用戶,不需電話費。有些廠商也提供與PSTN電話的轉接服務,允許與PSTN用戶互相通話,但通常要付費(較傳統PSTN費率低)。

寬頻業者:寬頻業著在給用戶的Modem中加入IP電話功能,讓用戶在使用該公司寬頻服務時,同時有IP電話的功能。

內容供應商:例如Cable的業者,在提供電視節目的服務外,將IP電話功能整合在一起。讓用戶申請一個服務,同時具有多種功能。

交換機業者:一般以企業為對象,提供IP base的交換機,取代以往傳統的交換機,利用辦公室中既有的網路線作為電話線,配合網路資料與公司內部網站結合,提供更多的企業服務。

IP電話中心:以企業為對象,和前一個交換機業者的服務一樣,不同的是用戶電話的交換機功能直接實作在供應商端,用戶端沒有交換機。

電腦裝置的IP電話:利用個人電腦執行軟體達到語音通話的功能。

IP 電話目前的難處

法令規定電信裝置都要提供緊急電話(911)的服務:但是IP電話基於網路 無地域性的基礎,無法判定撥號著的位置,所以無法轉接到最近的處理中心。

安全性:IP 封包傳送在公共網路上,無法阻止第三者的監聽。

IP 電話的遠景

IP電話能增加線路使用率,所以節省電話費用,另外由於其架構不限制僅有語音的傳送,所以允許增加通話裝置的附加價值,如影音,文字,同時加入IP 電話裝置中。

將來配合網路存點與頻寬的增加,使用者可更輕易的取得電話服務,並且與許多功能配合在一起:諸如 影音會議,文件討論,語音留言。

IP 電話 的設計

現行IP電話可以分為以下幾類

USB Phone:經由USB裝置,將聲音與撥號資訊交給PC,經由PC執行的軟體達到通話的目的

Wireless Phone: 經由Wifi網路達到IP電話的功能,做到近於Cell Phone的產品。

ATA/Home Gateway:將一般電話轉為網路電話的轉換器。

產品設計要考慮的因素

與一般Embedded裝置一樣,比較重要的的語音的壓縮/解壓縮功能,考慮由DSP來完成或是由軟體方式時作。設計時針對不同的Maket決定不同的壓縮/解壓縮格式。

使用於企業內部的產品,需要注意要與企業內部的網路架構整合,需要更可靠的通訊品質,與更耐久的產品設計。

Wifi Phone則要考慮在Wifi AP間的移動是否會影響到通訊品質,與一般GSM系統整合時,二者間的交互動作。轉接。

Qos

語音具有即時性,所以優先權較一般資料為高,為使網路傳遞的資料能有優先數順序,所以有新的實作方法和規範產生,就是QoS

QoS通常需要網路裝置(routergatewayswitch)的配合才能完成,所以通常IP 電話的供應商都會同時推出符合自己產品規格的網路裝置。

心得

VOIP已經發展了6,7年,迄今已經到了成熟的階段。配合寬頻網路大量建置及,目前應該是IP電話普及化的時機,但因為大部分電話服務仍須與傳統電信業者配合,所以若是要以單純的IP 電話為產品,除非與傳統電信業者合作,否則很難獲利。

另一個方向來考慮,最近造成風行的Skype網路電話則是與一般電信運作方式完全不同的產品。基於優越的firewall穿越技術與語音壓縮能力,所以有良好的撥通率和通話品質,也造成他風行的原因。但因為他採用封閉的系統與協定,還有P2P的架構,所以不容易作在Embedded System中(Embedded 的版本聽說正在開發中)。所以目前市場上只有USB Phone的產品。

VOIP應該不會成為單一的商品,將來應該是所有網路產品的Value Add

星期一, 6月 20, 2005

轉貼:Hacking日記

我好像從來沒有分享過 hack 機器的經驗…
最近碰巧遇到一台機器, 有感而發來寫篇文章分享一些東西.
分享的東西不是說如何去 hack 一台機器, 而是要如何保護好自己…
喔喔 sorry, 這句話講的好像有點太偉大了,
這篇不是一個深入探討系統攻防的文章, 高手不用抱太大的期望 :)

我很少去玩 Windows 的機器, 因為我覺得 UNIX 的機器比較有挑戰性也比較有趣,
不過這次恰好遇到一台 Windows 的機器, 閒來無事看到有機可趁就把他幹掉了…

很多人都知道使用 Windows 系統要定期做 Windows Update,
要裝防毒軟體, 外加定期更新他的的病毒碼, 不要執行來路不明的程式,
要開防火牆, 要裝 SP2(?), 不要用 IE(?), 不要用 Outlook(?)…
這樣才你的系統不會沒事就被幹掉.

但是在 Internet 流行的現代, 要架設一台伺服器出來實在是太簡單了,
尤其是在 Windows 上, 就算對伺服器完全不懂的人也只要隨便抓個伺服器軟體,
一直按下一步下一步下一步, 馬上就可以建立一個對外的服務…
但是對於這種對伺服器一知半解的人, 胡亂設定一通所架設出來的東西,
往往也幫自己的系統開了一個很大的洞.
在做 network security 實務的人, 也對這樣的現象感到很頭痛.
尤其是這個現象現在在網路上真的越來越普遍.

這次舉的例子就是一個眾所皆知, 被廣泛使用的 FTP 伺服器軟體: Serv-U.
這個軟體可以讓你很容易的建立一個 FTP 伺服器, 分享軟體給其他人.

事情就發生在某天有個 FTP command packet 經過我家網路卡的洞口,
這時候我在洞口剛好看到這個 command packet 從我家門口經過,
也剛好上面寫了一組 username & password….

這邊先告訴我們一個教訓, 一般 FTP 預設所有的資訊都是不加密不編碼的.
所以重要資料要傳輸的時候請用 sftp 或用支援 SSL/TLS 的 FTP 伺服器,
所以想要架設 FTP 伺服器的人最好要考慮好自己的需求及開放的程度.

觀察也發現這個 FTP 連線的流量很大, 想說上面應該有好東西, 所以就上去看看…
GOOD! 超過 800G 的容量, 雖然說不是非常長更新, 但是東西還不少.
後來在目錄裡切來切去的時候發現居然切回 C:/ 的目錄 …

這邊又要告訴我們, 使用 FTP 伺服器的虛擬目錄功能時, 要仔細設好目錄的權限,
最好能把該 user 鎖定在 FTP 的根目錄中, 不要讓他能逛到系統的檔案區.

ok, 居然切到 C:/ 之後, 手指就不自覺得想建立一個目錄試看看,
目的在於試試看 C:/ 是不是 Read-Only…. “Premission denied.”
好險他的系統目錄是 Read-Only, 要不然這人就真的是大白痴了.
不過還是可以在系統目錄裡面逛逛看有沒有什麼好東西可以紀念一下..
就想說去看看他 FTP 伺服器的 user config file 好了,
當然就很順利的抓到 serv-u.ini , 裡面有所有的 ftp account 資訊.
好險 serv-u 裡面的 user password 是用 one-way encryption 編碼過的,
要不然他可慘了.

這邊有個例子, 在看解碼器的時候都是強調要先拿到 shadow password file.
有人就問過我, 讀不到 shadow password file 要怎麼拿去給解碼器解碼?
如果拿到 shadow password file 就代表拿到 root 權限了, 那幹麻還要解碼?
這也一個有 shadow passwd file 但是沒有完整權限的例子 (好像有點爛?)

不過對於跑解碼去解那些編碼過的 serv-u 的密碼我可一點興趣也沒有,
一來要花時間去解碼, 二來可能會解不出來, 三來解出這些密碼也沒啥用.
頂多是看看裡面有哪些 account, 大致上有什麼權限等等…
然後也注意到有些 user 是有完整的讀寫權限的, 不過我還是懶的去解那些人的密碼.
但是當我看到我正在用的這個 account 的資訊時, 發現了一個很好玩的事.
這個 account 除了 READ(讀取檔案), LIST(目錄列表) 權限之外,
居然還有 APPEND(檔案附加) 的權限 ??

APPEND 權限乍看之下並沒有太大的用途, 但是可以想想他的作用..
他可以在任何一個檔案後面附加資訊進去, 這跟 WRITE 權限已經沒有多大的分別了!
你有想到要如何利用這個權限來取得機器完整的控制權嗎?
我的作法是, 我可以新增一個 ftp account 在 serv-u.ini 裡面,
也就是新增一個 FTP 帳號, 並且給予這個 user 完整的存取權限!!
作法就是先把原本的 serv-u.ini 抓下來, 然後在後面加上一個新的 user account,
然後在利用 FTP續傳 的功能把改過的 serv-u.ini 傳上去 (使用到了 APPEND 權限),
這樣新增的 user account 就會進去了…

然後用新建的 ftp account 去登入 FTP 伺服器… Logged in !
這時候我們可以在利用 Serv-u 的特殊指令: site exec , 在 FTP 伺服器端執行任何指令.
而且執行的視窗也不會在 console 上跳出來, 這根本就是為 hacker 設計的嘛 XD
(這個 ftp account 必須具有 EXEC 權限)

不過這樣還不夠, 我們先建立一個批次檔, 傳到伺服器的硬碟上, 並且透過 serv-u 去執行他:
qprocess > process
net user > users
net config server > config.server
net config workstation > config.workstation
net statistics server > stat.server
net statistics workstation > stat.workstation
quser > quser
這些命令無聊的人可以在自己的 windows 上執行看看,
他只是列出一堆系統的資訊, 並不會造成任何損害…
好奇的人可以試試看, 執行完後會把資訊寫在一堆檔案裡面, 打開就可以看到了.

取得一些系統資訊後就要來想辦法真正控制整台電腦,
我們可以利用的是 WinXP, Win2003 之後提供的 遠端桌面 的功能,
遠端桌面對一般 user 來說是很棒的電腦遙控工具, 對 hacker 來說是一個很漂亮的大門…
想要用遠端桌面登入對方的電腦, 必須有 Windows 的 account & passwd (不是 serv-u 的),
並且該 user 要被設定成可以由遠端桌面登入 (或是該 user 屬於 Administrators 群組)

在這邊我們並不知道這台電腦的系統帳號跟密碼, 那要怎麼辦?
那還不簡單, 幫他建一個就好啦! 一樣透過 Serv-u 執行這些命令:
net user hihi 12344321 /add
net localgroup administators hihi /add
這樣我們就有一個 hihi 的 user, 密碼是 12344321
這時侯還要確認看看對方的 3389 port 有沒有打開, 現在很多人都會使用使用遠端桌面的功能,
所以大部分都是開的, 如果沒開的話就幫他把遠端桌面的服務啟動就好了…

這邊我們也學到一個東西, Windows 的 port 3389 就像 UNIX 的 port 22 一樣,
是個讓 Hacker 很方便進來的大門, 很容易讓人很方便的完全控制你的系統.
在 UNIX 底下比較嚴謹機器都會把 port 22 擋掉, 只開幾個信任的 IP 可以連接…
相同的在 Windows 底下也是一樣, 可以的話也盡量能限制能連接 port 3389 的 IP …

這時候我們使用 hihi 透過遠端桌面連接對方的電腦, 已經是能控制對方系統的極限了.
但是要注意的是, 要清除所遺留下來的 logs… 這邊就不多說了.
還有就是遠端桌面登入的時候會造成 console 的 user 被 logout (for WinXP),
所以不想被發現的話可以改用 VNC, UltraVNC, PCAnywhere 這類的東西…

時代在進步, 用來越多方便 user 使用的工具一直被發展出來, 架設伺服器的門檻也越來越低,
相對的, 讓 Hacker 能進入的縫也越來越多.
在這種網路的時代, Netowrk security 的概念是一個必學的課程…

以前曾經有個 Hacker 說過:
“如果網路掌握未來人類的生活, 那我就是未來之神”
現在網路已經快要掌握未來人類的生活了, 未來之神不知道會有幾百萬個…….
(當然啦, 我還不在裡面)


這是從LCR’s BLOGCO的

Job : 參考現有的Control Panel和Spec,決定LCD內容

也就是要有的ICON和數字顯示有哪些。
對應的功能要怎麼在這些ICON,數字實現。

Some Notes about ...Codes from NELLA

並沒有實作任何的kernel或是realtime operation,所以為了避免一個task會佔據掉cpu太多時間,task的實作都要用state machine的方式來實作。
task function的開頭好像都是 TSK_

SIP

SIP (session initial protocol) 的目的是要達成類似一般公用電話(PSTN : Public Switched Telepone Network)的功能:撥號,響聲(ring),ringback tone or busy tone。

SIP是一個peer to peer的架構,只需要級簡單的網路架構,所有的工作都由網路上的端點提供。

SIP 可以和其他的protocol合作,但是他只負責通訊中Signal的的動作,SIP作為SDP (Session Description Protocol)的用途,用來協議session的內容:IP,port,codec,,等等。一般來說,使用SIP的session內容大多是 packet stream或是RTP (Realtime Transport Protocol),這些RTP才是用來傳遞voice或video 內容的protocol。

第一個SIP standard (SIP 2.0)定義在 RFC2543,進一步的規範在RFC 3261。

SIP 和HTTP類似,設計理念也和http相近:readable,simple,request-response。雖然當初設計以Simple為目的,但 是演化到今天,其內容已經複雜如H.323。SIP使用許多http的status code,像404 'not found'。

SIP Network Element

許多廠商都可以生產和一般電話相同,但是利用SIP,RTP通話的通訊設備,可以利用Electronic Numbering和DNS將一般電話號碼轉為SIP位置,這樣就可以不經由一般電話商(PSTN)直接撥打受話端。

現在是市面上有很多軟體的SIP endpoint,像Microsoft的Messenger,Apple的iChatAV,AOL的AOL instant messenger。

雖 然SIP不需要依賴SIP網路架構的特殊端點來溝通(所以稱為Peer to Peer),但是在Public Service上還是需要Proxy和register network來協助。目前已經有許多公司實作出Softswitch,這些Softswitch可以作為proxy和register使用,Java JAIN standatd就是一個sip proxy, register的規定。

Instant Messenging and Presence

SIMPLE是一個建立在SIP上的協定,用來標明present status (在不在線上),使用SIMPLE的一個範例就是MSN,它可以顯示聯絡人目前在不在線上。

Commerical Application

用來傳輸media stream的RTP 協定不能通過NAT router,

VOIP的三個發展階段

  1. LAN,intranet或是internet上不保證通訊的方式達成通話,不與一般電話直接連接,藉由業者的網關(Gateway)達到與一般電信業者戶聯的動作。主要利用H.323的協定。
  2. 建構大規模的internet Voip業務,專屬的通訊建設提供保證通話的服務,具有電信營運模式,與一般電信業者互通。H.323v4與H.248。
  3. 利用現有骨幹,提供更多的內容,如多媒體應用,並建立一個完整的可監管語音通訊架構。
傳 統語音電話是利用接線生(沒錯,即使是現在的交換機原理也是一樣,不過是由活人改為電腦),將一條電線皆在兩個要通話的電話上。VOIP則不同,比較像寄 信,說話端將話的內容用很多錄音帶錄下來,標上次序,一個一個裝在信封裡,寄給收話人,藉由local郵局,總局的轉送,送到收話人手裡,收話人再將所有 的錄音帶依照順序撥出來聽。

以上的動作雖然看來不可思議,但是在所有的動作都很快的時候,就可以忽略掉手續中間所花掉的時間。

IP Phone就是利用語音壓縮技術與快速的網路,讓傳送1 sec的通話資訊所需的時間小於1 sec。
由於IP hone的品質依賴網路通訊的品質,但是internet的網路基本特質並不具有優先權,也就是說router在轉送一個email的data和一個voip的data使以相同的優先權來傳送的,並不因為email可以延遲而給予voip較高的優先傳送作業。

為此,一些新的協定規定了出來,將ip 資料加以分級,希望rotuer能依照這個規定來作routing的動作。

目 前在一般的internet架構下,達到可用的voip技術的就是skype,他是利用P2P協定(SIP),不使用集中的Server來減少 Server對大量User話務所造成的依賴,利用高壓縮率來降低資料量,利用node間的協助合作達到通訊的目的。另外也和電信業者合作,利用收費方式 達到與一般業者戶聯的功能。

轉貼: 為什麼 Mac 不好?

自從上個月買到了 mac mini 之後,這個月來總算圓了長久以來的 mac 夢,真是過足了癮。但是... 說真的,mac 真的只能當一台放在客廳的電腦,問題真不是普通的多...

What I love Mac:

  • UI 的反應速度不錯,效果也很多,整體的感覺非常的 smooth。這是 windows/linux 遠遠及不上的。
  • Dock 的概念很新,一開始用還不大能適應,因為程式關了視窗卻不是關掉程式本身,只能算是 Hide 而已。不過久而久之,你反而會習慣讓 OS 自己去管理開啟的程式,只要 RAM 夠大 就好 (個人是用 1g) 。完全不用去傷腦筋現在開了多少程式,多少視窗 (windows 的 task bar 就是這樣)
  • Eye candy 很多,很炫很酷。show 給大家看時很爽~~
  • 字形 smooth 之後很漂亮。
  • PDF anywhere,這點就真的很強了。唯有 pdf 才是真正的 portable 文件啊!
  • 好用的 expose ,視窗滑來滑去的好看,找起來也快,設定好之後用滑鼠就能操作,讚。
  • 支援 MS Office, Oracle 9i/10g, Eclipse, Firefox, msn... 等等我每天必用的軟體。
  • Unix based, built-in XWindow, open ldap, and cvs server... etc
  • 支援 palm 的同步,光這個就打死 linux 了。
  • 系統設定很簡單 (網路、硬體.... etc)
  • 有免費的 remote desktop control 可用,有這個真的很方便。
  • Virus/Spyware free !
  • Mac mini: 超小台,可以當 notebook 用了。個人每天帶著這台上下班喔。
What I hate Mac:
  • 中文,中文!!支援中文實在太爛了。
  • 首先 iTune 遇到非unicode 的 id3 tag 中文通通掛掉。是啊,網路上是有轉碼的程式可用,不過只要轉過一次就知道,掉字的掉字,亂碼的亂碼,還是不可行,而且只能轉 mp3,不能轉 mpc/ogg。
  • 第 二,從 windows office 來的檔案打開後中文常常變亂碼。大概是 windows 和 OS X 處理中英字型混用的方式不大相同造成的,也有可能是 office 自己搞爛的。還有就是 office 2004 和一般 windows office 相容性很爛,常常排版都亂掉了,這當然是 MS 的錯 (而且錯的愚蠢) 。但不管是誰造成的,在 Mac 上就是別想好好用 office 了。
  • 第三,中文字 Apple LiGothic 的英文字太小,但偏偏是系統字型,改都不能改,可憐的 台灣 Mac 族長久以來一直不斷忍受... 直到現在,大家還是在忍受...
  • 第四,輸入中文時,有時候第一個字的英文,有時候會是中文,跳來跳去.... 很爛。
  • 第五,palm 是支援了,不過中文上還是有些小問題。而且 palm 已經宣佈不在支援 Mac 了,真糟糕。
  • keyboard binding 與 PC 系統相差太大。PC 都是以 ctrl 鍵當作指令的起點,而 Mac 則是 command 鍵,每個系統 keybinding 不一樣是理所當然... 不過當 Mac 在網頁上時就吃虧了。有些網頁可以用 hotkey 操作地,不過大多是設計給 PC 用的,這時就不相容啦。另外 unix 下的軟體也都是用 ctrl 操作的 (unix 可沒有 command key) 所以如果一旦同時操作 Unix terminal 和其他 OS X 原生軟體,你會發現一會要用 ctrl,一會要用 command,手忙腳亂,效率大減。
  • java,java !! Eclipse 實在太慢了,eclipse 的反應速度跟不上我寫程式的節奏,寫程式變的一頓一頓的,超不爽!
  • Firefox,Firefox !! Firefox 慢死了,受不了的慢~~~
  • JDK 5.0 ! jdk 5.0 已經出半年了,到現在還沒有影子,不要跟我說那個什麼 Tiger preview,當其他 OS 已經有免費的可下載了,誰還要花一堆精神去搞不大能用的半成品 ?而且還非 OSX 10.4 才可用,可笑可笑。
  • 雖 然是 Unix based 的系統,當你要裝 unix 的東東時... 比如 open ldap, cvs server... 時就會發現其實不能照 linux 的方式來裝,有很多地方要改,這也是理所當然,每個 OS 都有自己的設定方式。但是重點是資源少的可憐,甚至是沒有。而且 OSX 還綁了一個 netinfo,搞的都跟大家不一樣,找不到資料時就只好放棄... 。如果花了很多時間學習 OSX 上的 unix,投資報酬率很低的,因為好不容易學了一堆東西,你不見得有地方可以發揮,對工作上幫助並不大 (台灣有幾家公司用 OS X server ??)
  • free 的軟體很多,但是完成度都不是很高,有哪個 Mac 軟體能像 foobar2000 一樣通吃所有格式,超強的 mass tag,外加極佳的音質? 有哪個 Mac 軟體能像 filezilla 一樣提供全功能的 ftp client,可以 queue file transfer?有哪個 Mac 軟體能像 xnview 一樣超快速的瀏覽圖片外加 batch 修改圖的功能?有哪個 Mac 軟體可以像 7-zip 一樣通吃所有格式,提供方便的 UI ? (7-zip windows 的 UI 並不怎麼樣,但是 Mac 的更不像話!)
  • Eye candy 是不錯啦... 不過看久了 (我用了一個月) 就覺得沒什麼了,還是效率比較重要。
  • Mac 的東西貴,太貴了。我現在買的是 apple 大放送的 mac mini,如果萬一未來被 Mac 綁死了,就只好繼續買 Mac,一台像樣的 powerbook 多少錢? 9萬元!天啊~~~
大致上來說,只要有軟體跨平台跨到 Mac ,通常在 Mac 的效率都是最差的,偏偏這些跨平台的軟體都是公認最好用的,例如 firefox, eclipse (軟體可以跨平台跨到 Mac 表示極受大家愛用)。我想了一想,效率差原因可能是:
  • Mac 上程式不好寫 or 不好最佳化
  • Mac 的 (好) developer 少
  • Mac 的硬體太慢
  • 那些程式一開始就不是在 Mac 上寫的,是 port 過去的
第 一點比較難判斷,而 firefox 和 eclipse 慢的原因應該是第四點吧... 不過第二、第三點也不無可能。Mac 用的人少,自然吸引不了什麼開發者,很多公司後來也只出 windows 版的軟體了。Mac 的硬體慢嗎?也許某些領域 Mac 不錯,不過就 notebook (mac mini 算是歸在 notebook 內) 來講 Mac 已經落後 PC 太多。PC 在 intel/AMD 兩家的競爭嘶殺之下,進步快多了。而所謂的 G5 powerbook 也還生不出來,就算生出來了一定是爆貴 (台幣 9~10萬 吧,誰買的起?) 而且也不見得比 PC based 的 notebook 快。

哎.... 看來還是得回 Windows... 沒錢玩不起高貴的 Mac
以上是由 Xexex's Java 和其他二三事 CO過來的

Richard's Mac 程式精選集


http://homepage.mac.com/ulyssesric/bestpicks/

星期日, 6月 19, 2005

network apps : notes

http://www.evhead.com/2005/04/running-your-company-on-web-apps.asp

gnu tools for win32

http://unxutils.sourceforge.net/

星期五, 6月 17, 2005

有關MIPS

MIPS的全名是 Microprocessor without Interlocked Pipelined Stage。
期設計概念就是藉由刪除需要interlock的指令,讓整個instruction pipeline可以加快速度。
雖然後期卻又還是加上了一些會interlock的instruction,但是整體架構已經很optimize的,據說這是第一個RISC Processor,很都設計都為其他processor (無論是CISC或RISC)所採用。

MIPS的指令很少,分為三種Type:
  • R : 3 register,1 function field.
  • I : 2 register,16bit immediate value.
  • J : 6 bit opcode,26 bit immediate value.
詳細一點的指令
運算指令
  • add $1, $2, $3; $1 = $2 + $3 (signed)
  • addu $1, $2, $3; $1 = $2 + $3 (unsigned)
  • sub $1, $2, $3; $1 = $2 - $3 (signed)
  • subu $1, $2, $3; $1 = $2 - $3 (unsigned)
  • addi $1, $2, 13; $1 = $2 + 13 (immediate)
Load/Store
  • lw $1, 100( $2 ); 把位址 $2 + 100的word資料搬到$1
  • st $1, 100( $2 ); 把$1的word資料放到位址 $2 + 100的地方
條件/跳躍
  • beq $1, $2, 100; if $1==$2 goto PC + 4 + 100
  • slt $1, $2, $3 ; if ($2<$3) $1 = 1 ; else $1=0
  • j 10000 ; goto 10000
  • jal 10000 ; $31= PC + 4 and goto 10000
其他
  • lui $1, 100 ; load the immediate into the upper 16bit
MIPS有32個32 bits 的general purpos register,
R0的內容固定是0 (是constant) zero
R1是assembler的temp $at
R2, R3是subroutine的return value $v0, $v1
R4- R7 subroutine的參數 $a0- $a3
R8- R15 Temperory,呼叫function後摧毀, $t0 - $t7
R16 - R23 Saved,呼叫function後依然不變, $s0 - $s7
R24, R25 Temporary $t8, $t9
R26, R27 kernel (OS)用 $k0, $k1
R28 Global pointer $gp
R29 Stack Pointer $sp
R30 Frame Pointer $fp
R31 Return Address $ra (在某些instruction中使用)
R

BSD 的開發者說Linux :

Theo de Raddt認為Linux是一堆濫東西,他是BSD的開發者。
他認為BSD的code比較好,因為BSD的開發模式是由以一個小組來負責,所有的code都出自於這些人之手,而這些人又都是一些很好的software engineer,所寫的code也都不同凡響。而且BSD系統有一個整體的設計,所有的細節都是環環相扣的。
但是Linux的開發方式就不依樣了,所有人都可以寫code,然後mail給Linus,由他決定哪一些code會被加到核心,所以linux的code都是由一些小小的hacker寫出來,而且剛好可以動,沒有整體的設計概念。

MemoryStick Interface

有Parallel和Serial兩種。
Serial使用4 pin :
CLK : 同步clock
BS : Bus State
INS : Insert/Removal detection
SDIO : Data

BS
BS signal是host controller用來通知memorystick用的,有四種狀態(由時間來區分)
BS 0 : INT transfer state
BS 1 : TPC transfer state
BS 2 : Read Packet : handshake / Write Packet : Data Transfer
BS 3 : Read Packet : Data Transder/ Write Packet : Handshake
...

I2S : Inter IC Sound bus

用在所有Audio processor IC間傳輸資料用。
使用3 pin 作同步,序列傳送
  • SCK : clock
  • WS : word select
  • SD : Data
SD
資料以2的補數傳送,MSB先傳,固定在WS信號改變的下一個CLK後送出。SD latch在SCK的leading edge.
WS
作為channel id. WS=0 : channel 1(left)。WS=1: channel 2(right)。

一般的Media Processor設計

Media Processor都是由一個core(一般是ARM),配上一個DSP。然後是一個強大的DMA controller。有些包裝得比較好的還會有PAL/NTSC encoder和audio 方面的interface。再有甚者加上了現在流行的storage card controller。

Core
  • 32bit RISC + 64bit DSP
  • 8/16 bit DRAM controller up to 128Mb
  • 16 bit SRAM/EPROM interface to boot
Video
  • Decode MPEG-1, MPEG-2 video and JPEG Photo.
  • Decode MPEG-4 video at D1 resolution.
  • CIR656/601 digital video output port
  • Progressive Scan NTSC/PAL video encoder provide S-video, YUV output
  • OSD controller (256 color)
Audio
  • audio processing for CD-DA, MP3, AAC, WMA playback with 7-band equalizer
  • I2S multichannel audio serial port (5.1).
  • S/PDIF digital audio stream output
  • Card Control
  • 16bit host interface to manay storage solutions : CF, SM, xD, IDE HD,
  • serial interface to SD, XD, MMC and MS.
* 其實還有Camera In和Audio in,但是因為沒有encoder功能,所以這個不知道要幹麻?

DSP
DSP負責作decompress的動作,將結果放在RAM裡,DRAM DMA會將這些資料放到video output interface。
Video Processor
有 以下動作:memory R/W, conditional branch, compute,Video processor一般用來作video的micro block的計算,當然也可以用來作其他的功能,或是作audio壓縮/解壓縮。內涵8k ROM,存放一般常用的microcode,其他不常用的microcode可以用download的方式放在internal 2k RAM。(所以顆DMP也可以用來作video壓縮?)

Command Queue
command queue 是給Video Processor用的,RISC可以將一連串的instruction放在queue中讓image processor依序執行,然後等待她完成。
溝 通的方式是1.先將instruction依續在ram中排好. 2.啟動DMA,要求將剛剛排好的ram block依序送給video processor(DMA 的target address是Video processor的command register)。
DMA controlller
可以作以下的資料搬運作業:
  1. video data/video decoder == memory
  2. video data/memory == RISC
  3. RISC to video processor command (via memory ?)
DMA controller提供特殊的register供Video processor load microcode.和對video processor內部狀態的monitor。
Video MPEG decoder
好像有一個hardware的Huffman engine decode Vairable Length Codes (VLC),有內建的MPEG-1,MPEG-2 VLC table。
decode 的工作,RISC作所有parse data的工作到microblock level,好像有一個hardware的start code search engine,將parse的coefficiency傳送到DSP。依序將microblock data送給DSP,安排DSP執行適當的microcode routine,DSP將結果放回DRAM framebuffer
NTSC/PAL encoder
encoder 以標準的速度(13.5MHz)讀入CCIR656/601格式的digital frame data,將color space由YCbCr轉為YUV或Y/C。再放入output FIFO,encoder會自己產生PAL/NTSC需要的同步信號,subcarrier freqency,encoder含有4個10 bit的DAC,將pixel data轉為PAL/NTSC信號。
OSD controller
全螢幕提供每個pixel 8 bitcolor,8個透明層次的螢幕輸出。
Host Interface
提供debug port作debug用和一個DMA port,讓chip可以由外界讀入bitstream data。
Audio Interface
提供serial port配合外加的ADC/DAC,以I2S的格式傳送PCM audio data。可以提供stereo和5.1的輸出。
Video bus
以CCIR656/601格式送出pixel data。(8-bit bus width)
Video Post Processing
補償CCIR656/601作horizontal up sampling。

奇怪的產品:網路MCU

taifatech
有出一些將51/390和100M Mac + TCP/IP Protocol accelerator合在一起的chip。
當然,ROM,RAM也都內涵了。

以TF-320這顆 Webserver controller來看:
主要適用來作,Web controller用,利用chip上的GPIO,或是RS232,讓user可以藉由browser控制裝置。
TF-320的web server是software coding (市面上有hardware的http server ?)。
所以可以改寫成自己需要的控制方式。

星期三, 6月 15, 2005

利用GPRS的data collection架構


... http://www.ocx.idv.tw/GPRS-Socket%20Gateway%A8t%B2%CE%A4%E8%B6%F4%B9%CF.htm

SPA的remote dialognostics system

From Mr Yeh's mail, the troubleshooting tech used in Balboa is VTTI.
但是VTTI的website根本就連不上去,只好用google的archieve供能,看看就網頁。
從他archieve的日期看來,已經連不上1年多了。

大概是因為GPRS已經漸漸改為3G,而java手機又沒有成為主流。...

不過從archieve page可以看出它使用的是一個基本的Service Center的方式,
所有裝置藉GPRS上網,連接上internet,再向Service Center傳送資料。
Service Center再轉送給technician.

Balbao的Service Center 是SpaConnect

arm-elf-tools-20030314.sh 執行

因為這個self-extrate and install scripts 使用了 "$0",所以invoke的方式會影響它是否能執行。
一定要 chmode +x,否則不能執行 (not executable).
一定要用./arm-elf-tools.sh來install,不能用 . arm-elf-tools.sh (因為$0)

Skyeye Install and Test

download and unpack : 0.9.5
read README. # ./configure --target=arm-elf --prefix=/usr/local
Error : GTK - version > 1.1.3... Package gtk+2.0 was not found in the pkg-config search path.
所以Skyeye需要GTK ?

懶惰,用X裝上gnome software development.
configure OK

su and make, make install OK

裝tun.o module
tun.0 位置在 /lib/modules/2.4.20-8/kernel/drivers/net裡,
(如果沒有,要compile kernel ?)

#insmod /lib/modules/2.4.20_8/kernel/drivers/net/tun.o

到skyeye website download vnet sourcecode.
follow vnet/installguide
先create node
#mknode /dev/net/vnet c 10 201
#chmoe 666 /dev/net/vnet
build vnet ,出現error,大概是module的問題。一堆parse error,但是都是在include file裡,
有些是warnning : using kernel header in userland.
查Makefile,發現kernel header include path是:/usr/src/linux/include。
但是系統的install path是:/usr/src/linux-2.4/include。
修改Makefile。OK,剩下一些implicit declare的warning。
#insmod vnet.o

安裝完畢,follow README,要edit skyeye.conf,但是不知道這個file在哪裡。


Google,好像不一定需要安裝vnet (here)

Linux : SAMBA Redhat 9.0 - smbpasswd

Again. 又要設定samba.
發現沒裝 : service smb沒有這個service.
install samba -- by rpm .(懶惰,用X裝)
config /etc/samba/smb.conf --也沒怎麼改。

#smbpasswd -a charles
雖然最後是成功Added user charles,但是有Error message : unable to open passdb database.

Google一下,好像是因為沒有smbpasswd這個file,但是在第一次執行smbpasswd後就create了,所以第二次smbpasswd 後已經沒有error message
.

Google的結果說是要將root加入smbpasswd中:smbpasswd -a root,但是好像不是主因。

星期二, 6月 14, 2005

ThreadX said : multithread may not lower down the system throughput

從ThreadX的說明文件摘錄的:
Many developers assume that multi-threaded
environments like ThreadX increase overhead and have a
negative impact on total system throughput. But in some
cases, multi-threading actually reduces overhead by
eliminating all of the redundant polling that occurs in
control loop environments. The overhead associated with
multi-threaded kernels is typically a function of the time
required for context switching. If the context switch time
is less than the polling process, ThreadX provides a
solution with the potential of less overhead and more
throughput. This makes ThreadX an easy choice for
applications that have any degree of complexity or size.
實 際上要比較context switch和loop polling的時間,如果loop polling的時間很長(也就是說control loop有很多variable要檢查),那麼使用multithread system會比採用control loop的forground/background design來得有效率。

所以這純粹是設計上的問題,forground/background也可以設計成event driven。
不過若完全以system throughput來設計,forground/background的設計overhead一定比較小。

星期一, 6月 13, 2005

Sarge Mirror Site

ftp://linux.csie.nctu.edu.tw

試裝了一下,kernel還是2.4.27,install interface差不多。
如果選Desktop,用起來蠻像ubuntu。

拿到ethernet adaptor了,....原來是spec上的問題

向A問了Ethernet Adaptor的問題,
所以瞭解這是客戶不瞭解ethernet的特性所提出的需求,
並不是技術的問題,ethernet (TCP/IP)天生不提供這樣的功能。

Cutomer要插上RJ45就可以讓technician連上這個device,作debug工作。
也可以說:要device有問題時,主動通知technician。

可是一個用在家庭裡的裝置,怎麼可能會有一個專屬的public IP ?
如果有,那代表這個加原來就沒有裝寬頻,或是有錢到可以專為這個裝置拉一條專線。

再來,technician也要setup一個center server,讓這些裝置report用(customer還妄想讓全世界的device都回報過來)。以往經驗,連高價的mission critical 設備都不一定能有這樣的服務。consumer producter怎麼可能會有。

還有,一個這麼簡單的裝置,需要什麼remote debug功能? 即使是OnSite debug的動作都不多(幾乎沒有)。

所以,是一個天馬行空的要求。

而我讀了這個ethernet adaptor的manul後,覺得除了cost down外還沒有她改進的空間,功能上她已經做得不錯了,可以作為這類poductor的reference spec。

Skype的技術 - from the official techical notes

---------------------------------------------------

Non-firewalled clients and clients on publicly routable IP addresses are able to help NAT’ed nodes to communicate by routing calls. This allows two clients who otherwise would not be able to communicate to speak with each other. Because the calls are encrypted end-to-end, proxies limit the security or privacy risk.

Likewise, only proxies with available spare resources are chosen so that the performance for these users is not affected.

----------------------------------------------------

以上是由Skype 網頁摘錄的

未被firewall屏蔽的Node和擁有public ip address的node會被用來幫助在NAT後端的node完成routing的動作。這樣的方法讓原來無法直接通訊的兩個node經由public ip node的轉接(forward)而得以互相通訊(找到對方)。但是通話的內容是end-to-end加密的,所以轉接的node無法看到(通聽)資料。

但是只有空閒並且還有多餘resource的public node才會被用來當作是轉接通話的node。所以不會影響到她們通話的品質。

所以說public ip的node有可能會浪費自己的頻寬和CPU time在幫別人傳送資料?
所以當所有的node都在NAT後面,Skype也就掛了?(或是說所有public 的node都在忙著run SETI)。

Skype可以說是越多人用,越打得通。

MOXA的NE-4110 : Serial to Ethernet module

將RS-232的資料轉到Ethernet上。
35mm x 3 mm : NT 4000.

TCP Server Mode
  • 所以要設定這個board的ip,如果用DHCP,在IP變更時,會主動的periodically送出通知到特定的IP位址。
  • 使用TCP時,可以設定當多就時間沒有任何TCP的封包傳送就close這次connection。
  • 232部分,可以指定delimiter,也就是說碰到這個character,就當作是結束,將資料包裝送出。同時可指定silence interval作為delimiter,也就是說當有N msec無資料傳送,就將收到的資料包裝送出。
TCP Client Mode
  • 和Server Mode一樣,但是要設定destination ip address。因為client mode,modue發起傳送動作。
UDP Mode
  • UDP直接將資料送給destination ip,所以沒有發起/等待的區分。所以要設定destination ip。
  • 不需要設定keep alice time,idle time,因為不需要close session。
NE4100另外提供15個Accessible IP Settings,可以用來限制可以存取的ip,其中每組有netmask設定,所以也可以用來設定ip range。

Auto Warning
有幾種event產生時,可以設定NE4100利用SNMP Trap或是Mail送出warning message。
Event有
  • Cold Start
  • Warm Start
  • Authentication Failure
  • IP Address Change
  • Password Change
  • DCD (Data Carrier Detect) Changed
  • DSR (Datra Set Ready) Changed
Digital IO設定與Monitor
  • 可以規劃為IN或Out,設定Out時可以經由某Port設定high/low。
  • 可顯示出目前所有DIO的high/low狀態

SOCKS again

from https://www.xfocus.net/bbs/index.php?act=ST&f=3&t=36181&page=all

二、關於代理
一般做壞事的時候都害怕對方發現自己的真實IP,怎麼辦?用代理是簡單的辦法。下面描述如何編程使用各種代理。

1、HTTP代理
HTTP代理可以把我們的HTTP請求通過HTTP代理服務器轉發到我們要訪問的HTTP服務器,再把 結果返回給我們,以達到代理的目的。但其功能單一,只能實現HTTP的代理,具體可以查看RFC 2068、2616等相關RFC文檔。
正常情況下,我們請求HTTP服務是這樣的:首先和目的服務器的HTTP服務端口建立TCP連接,然後做類似「GET /index.html HTTP/1.0」的請求,HTTP服務器返回結果。當通過HTTP代理的時候是這樣工作的:首先和HTTP代理服務器的服務端口建立TCP連接,然後做 類似「GET http://目標服務器地址/index.htm HTTP/1.0」的請求,代理服務器對你的目標服務器做請求後返回結果給你。
相關的代碼在網上很容易可以找到,這裡就不列舉了。

2、socks代理
socks是一個簡單靈活的協議框架,包括4和5兩個版本,sock5是由IETF核准的基於TCP/IP協議的基本應用程序代理協議, socks由兩個部分組成,服務端和客戶端。具體信息可以查看RFC 1928相關文檔,在網上也可以搜索到許多基於socks5的開源項目,對照RFC文檔,你可以了解這個協議的使用。

『以下信息來直接摘自互聯網』

sock5代理客戶端的工作程序是:
1.客戶端向代理方服務器發出請求信息。
2.代理方服務器應答
3.客戶端接到應答後發送向代理方服務器發送目的ip和端口
4.代理方服務器與目的連接
5.代理方服務器將客戶端發出的信息傳到目的方,將目的方發出的信息傳到客戶端。代理完成。

由於網上的信息傳輸基本上都是運用tcp或udp進行的,所以使用socks5代理可以辦到網上所能辦到的一切,而且不用擔心目的方會查到你的ip,既安全又方便。

如何用代理TCP協議:
1.向服務器的1080端口建立tcp連接。
2.向服務器發送 05 01 00 (此為16進制碼,以下同)
3.如果接到 05 00 則是可以代理
4.發送 05 01 00 01 + 目的地址(4字節) + 目的端口(2字節),目的地址和端口都是16進制碼(不是字符串)。 例202.103.190.27 - 7201 則發送的信息為:05 01 00 01 CA 67 BE 1B 1C 21 (CA=202 67=103 BE=190 1B=27 1C21=7201)
5.接受服務器返回的自身地址和端口,連接完成
6.以後操作和直接與目的方進行TCP連接相同。

如何用代理UDP連接
1.向服務器的1080端口建立udp連接
2.向服務器發送 05 01 00
3.如果接到 05 00 則是可以代理
4.發送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字節)
5.服務器返回 05 00 00 01 +服務器地址+端口
6.需要申請方發送 00 00 00 01 +目的地址IP(4字節)+目的端口 +所要發送的信息
7.當有數據報返回時 向需要代理方發出00 00 00 01 +來源地址IP(4字節)+來源端口 +接受的信息

註:此為不需要密碼的代理協議,只是socks5的一部分,完整協議請看RFC1928

下面為一個實例程序:
這個例子可以在這裡找到(http://cache.baidu.com/c?word=%B4%FA%C0%ED%3B%B7%FE%CE%F1%C6%F7%2Csocks4%2Csocks5%2Chttp%3B%B4%FA%C0%ED%2C%B1%E0%B3%CC&url=http%3A//www%2Eade%2Ddesign%2Ecom/docfile/netandcomm/chap37%2Ehtm&b=9&user=baidu

在網絡程序設計過程中,我們經常要與各種類型的代理服務器打交道,比如在企業內部網通過代理去訪問Internet網上的服務器等等,一般代理服 務器支持幾種常見的代理協議標準,如Socks4,Socks5,Http代理,其中Socks5需要用戶驗證,代理相對複雜。我在查閱RFC文檔和相關 資料後,特總結一些TCP協議穿透代理服務器的程序片斷,希望對大家有所幫助。

//使用到的結構

struct sock4req1
{
char VN;
char CD;
unsigned short Port;
unsigned long IPAddr;
char other[1];
};

struct sock4ans1
{
char VN;
char CD;
};

struct sock5req1
{
char Ver;
char nMethods;
char Methods[255];
};

struct sock5ans1
{
char Ver;
char Method;
};

struct sock5req2
{
char Ver;
char Cmd;
char Rsv;
char Atyp;
char other[1];
};

struct sock5ans2
{
char Ver;
char Rep;
char Rsv;
char Atyp;
char other[1];
};

struct authreq
{
char Ver;
char Ulen;
char Name[255];
char PLen;
char Pass[255];
};

struct authans
{
char Ver;
char Status;
};

//通過Socks4方式代理
if( !ClientSock.Connect( g_ProxyInfo.m_strProxyIP,g_ProxyInfo.m_nProxyPort) )
{
m_sError = _T("不能連接到代理服務器!");
ClientSock.Close();
return FALSE;
}
char buff[100];
memset(buff,0,100);
struct sock4req1 *m_proxyreq;
m_proxyreq = (struct sock4req1 *)buff;
m_proxyreq->VN = 4;
m_proxyreq->CD = 1;
m_proxyreq->Port = ntohs(GetPort());
m_proxyreq->IPAddr = inet_addr(GetServerHostName());
ClientSock.Send(buff,9);
struct sock4ans1 *m_proxyans;
m_proxyans = (struct sock4ans1 *)buff;
memset(buff,0,100);
ClientSock.Receive(buff,100);
if(m_proxyans->VN != 0 || m_proxyans->CD != 90)
{
m_sError = _T("通過代理連接主站不成功!");
ClientSock.Close();
return FALSE;
}




//通過Socks5方式代理
if( !ClientSock.Connect( g_ProxyInfo.m_strProxyIP,g_ProxyInfo.m_nProxyPort) )
{
m_sError = _T("不能連接到代理服務器!");
ClientSock.Close();
return FALSE;
}
char buff[600];
struct sock5req1 *m_proxyreq1;
m_proxyreq1 = (struct sock5req1 *)buff;
m_proxyreq1->Ver = 5;
m_proxyreq1->nMethods = 2;
m_proxyreq1->Methods[0] = 0;
m_proxyreq1->Methods[1] = 2;
ClientSock.Send(buff,4);
struct sock5ans1 *m_proxyans1;
m_proxyans1 = (struct sock5ans1 *)buff;
memset(buff,0,600);
ClientSock.Receive(buff,600);
if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2))
{
m_sError = _T("通過代理連接主站不成功!");
ClientSock.Close();
return FALSE;
}
if(m_proxyans1->Method == 2)
{
int nUserLen = strlen(g_ProxyInfo.m_strProxyUser);
int nPassLen = strlen(g_ProxyInfo.m_strProxyPass);
struct authreq *m_authreq;
m_authreq = (struct authreq *)buff;
m_authreq->Ver = 1;
m_authreq->Ulen = nUserLen;
strcpy(m_authreq->Name,g_ProxyInfo.m_strProxyUser);
m_authreq->PLen = nPassLen;
strcpy(m_authreq->Pass,g_ProxyInfo.m_strProxyPass);
ClientSock.Send(buff,513);
struct authans *m_authans;
m_authans = (struct authans *)buff;
memset(buff,0,600);
ClientSock.Receive(buff,600);
if(m_authans->Ver != 1 || m_authans->Status != 0)
{
m_sError = _T("代理服務器用戶驗證不成功!");
ClientSock.Close();
return FALSE;
}
}
struct sock5req2 *m_proxyreq2;
m_proxyreq2 = (struct sock5req2 *)buff;
m_proxyreq2->Ver = 5;
m_proxyreq2->Cmd = 1;
m_proxyreq2->Rsv = 0;
m_proxyreq2->Atyp = 1;
unsigned long tmpLong = inet_addr(GetServerHostName());
unsigned short port = ntohs(GetPort());
memcpy(m_proxyreq2->other,&tmpLong,4);
memcpy(m_proxyreq2->other+4,&port,2);
ClientSock.Send(buff,sizeof(struct sock5req2)+5);
struct sock5ans2 *m_proxyans2;
memset(buff,0,600);
m_proxyans2 = (struct sock5ans2 *)buff;
ClientSock.Receive(buff,600);
if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0)
{
m_sError = _T("通過代理連接主站不成功!");
ClientSock.Close();
return FALSE;
}




//通過HTTP方式代理
if( !ClientSock.Connect( g_ProxyInfo.m_strProxyIP,g_ProxyInfo.m_nProxyPort) )
{
m_sError = _T("不能連接到代理服務器!");
ClientSock.Close();
return FALSE;
}
char buff[600];
sprintf( buff, "%s%s:%d%s","CONNECT ",GetServerHostName(),GetPort()," HTTP/1.1\r\nUser-Agent: MyApp/0.1\r\n\r\n");
ClientSock.Send(buff,strlen(buff)); //發送請求
memset(buff,0,600);
ClientSock.Receive(buff,600);
if(strstr(buff, "HTTP/1.0 200 Connection established") == NULL) //連接不成功
{
m_sError = _T("通過代理連接主站不成功!");
ClientSock.Close();


return FALSE;
}

我們一般先與代理服務器連通,然後向代理服務器發送代理驗證的用戶名和密碼(如果需要,如Socks5代理),驗證成功後,再向代理服務器發送需 要連接的目的地址和端口。以上代碼僅用於TCP連接,如果在內部網偵聽或通過UDP協議發送信息,可查閱RFC1928等文檔資料。

3、加密代理
這個嗎啥都可以代理,而且是加密的,安全的,常用openssl來架設加密代理服務器,你可以去http://www.openssl.org(這是一個開源的項目)去了解詳細信息,就不要自己編寫了,工程太大,用現成的就好了。 ^_^
---

非PCI BUS的100M ethernet controller

在大鳥實驗室看到的

Davicom的 DM9000E
SMSC的LAN91C111

其中Davicom還有附Linux driver (有full source ?)

星期六, 6月 11, 2005

換手?Apple和MS交換CPU

Apple Jobs宣布改用x86,XBox 360用ppc的core,
兩個人竟然交換cpu。

有人說是因為IBM只專注SONY的cell processor,所以G5高耗電的缺點一職沒法改進,Jobs要作的powerbook一直作不出來,所以只好改用 Intel。

那,XBOX 360幹麻不繼續用x86 ?卻要改用IBM的multi-core ppc。

Apple這個決定也利害,年底就要轉換完成了,Jobs甚至在WWDC中用x86的apple作present。
天哪,那imac mini不就是末代ppc apple ?
這下Switch過去ppc的,又要switch 回來了。

不過apple也利害,核心部分聽說從一開始開發就是x86,ppc雙軌,

星期五, 6月 10, 2005

RFC 1928 SOCKS v5 中文翻譯

組織:中國互動出版網(http://www.china-pub.com/)
RFC文檔中文翻譯計劃(http://www.china/-
pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
譯者:Radeon(Radeon bise@cmmail.com)
譯文發布時間:2001-6-18
版權:本中文翻譯文檔版權歸中國互動出版網所有。可以用於非商業用途自由轉載,
但必須保留本文檔的翻譯及版權信息。


Network Working Group M. Leech
Request for Comments:1929 Bell-Northern Research Ltd
Category: Standard Track M. Ganis
International Business Machines
Y. Lee
NEC Systems Laboratory
R. Kuris
Unify Corporation
D. Koblas
Independent Consultant
L. Jones
Hewlett-Packard Company
March 1996

SOCKS V5

本備忘錄狀態:
本文檔講述了一種Internet社區的Internet標準跟蹤協議,它需要進一步進行討論和建議以
得到改進。請參考最新版的「Internet正式協議標準」 (STD1)來獲得本協議的標準化程度和狀
態。本備忘錄的發布不受任何限制。
知識背景
這個備忘錄描述了從同一協議的前一版本(版本4[1])發展而來的一個協議。這個新的協議起
源於當前的一些討論和原型的實現(active discussions and prototype implementations)。關鍵的貢
獻人有:Marcus Leech: Bell-Northern Research, David Koblas: Independent Consultant, Ying-Da
Lee: NEC Systems Laboratory, LaMont Jones: Hewlett-Packard Company, Ron Kuris: Unify
Corporation, Matt Ganis: International Business Machines。

目錄

1.介紹 2
2.現有的協議 2
3.基於TCP協議的客戶 3
4.請求 3
5.地址 4
6.應答 4
7.基於UDP協議的客戶 6
8. 安全性考慮 7
9. 參考書目 7

1.介紹
利 用網絡防火牆可以將組織內部的網絡結構從外部網絡如INTERNET中有效地隔離,這種方法在許多網絡系統中正變得流行起來。這種防火牆系統通常以應用層 網關的形式工作在兩個網絡之間,提供TELNET、FTP、SMTP等的接入。隨著越來越多的使全球信息查找更容易的複雜的應用層協議的出現,有必要提供 一個通用框架來使這些協議安全透明地穿過防火牆。而且在實際應用中還需要一種安全的認證方式用以穿越防火牆。這個要求起源於兩個組織的網絡中客戶/服務器 關係的出現,這個關係需要得到控制並要求有安全的認證。
在這兒所描述的協議框架是為了讓使用TCP和UDP的客戶/服務器應用程序更方便安全地使 用網絡防火牆所提供的服務所設計的。這個協議從概念上來講是介於應用層和傳輸層之間的「中介層(shim-layer)」,因而不提供如傳遞ICMP信息 之類由網絡層網關的所提供的服務。


2.現有的協議
當前存在一個協議SOCKS 4,它為TELNET、FTP、HTTP、WAIS和GOPHER等基於TCP協議的客戶/服務器程序提供了一個不安全的防火牆。而這個新的協議擴展了 SOCKS V4,以使其支持UDP、框架規定的安全認證方案、地址解析方案(addressing scheme)中所規定的域名和IPV6。為了實現這個SOCKS協議,通常需要重新編譯或者重新鏈接基於TCP的客戶端應用程序以使用SOCKS庫中相 應的加密函數。
注意:
除非特別註明,所有出現在數據包格式圖中的十進制數字均以字節表示相應域的長度。如果某域需要給定一個字節的值,用 X'hh'來表示這個字節中的值。如果某域中用到單詞'Variable',這表示該域的長度是可變的,且該長度定義在一個和這個域相關聯(1 – 2個字節)的域中,或一個數據類型域中。


3.基於TCP協議的客戶
當一個基於TCP協議的客戶端希望與一個只能通過防火牆可以到達的目標(這是由實現所決定的)建立連接,它必須先建立一個與SOCKS服務器上SOCKS端口的TCP連接。通常這個TCP端口是
1080。當連接建立後,客戶端進入協議的「握手(negotiation)」過程:認證方式的選擇,根據選中的方式進行認證,然後發送轉發的要求。SOCKS服務器檢查這個要求,根據結果,或建立合適的連接,或拒絕。
除 非特別註明,所有出現在數據包格式圖中的十進制數字均以字節表示相應域的長度。如果某域需要給定一個字節的值,用X'hh'來表示這個字節中的值。如果某 域中用到單詞'Variable',這表示該域的長度是可變的,且該長度定義在一個和這個域相關聯(1 – 2個字節)的域中,或一個數據類型域中。
客戶端連到服務器後,然後就發送請求來協商版本和認證方法:

VER
NMETHODS
METHODS
1
1
1 to 255
這個版本的SOCKS協議中,VER字段被設置成X'05'。NMETHODS字段包含了在METHODS字段中
出現的方法標示的數目(以字節為單位)。
服務器從這些給定的方法中選擇一個併發送一個方法選中的消息回客戶端:
VER
METHOD
1
1
如果選中的消息是X'FF',這表示客戶端所列出的方法列表中沒有一個方法被選中,客戶端必須關閉連接。
當前定義的方法有:
? X'00' 不需要認證
? X'01' GSSAPI
? X'02' 用戶名/密碼
? X'03' -- X'7F' 由IANA分配
? X'80' -- X'FE' 為私人方法所保留的
? X'FF' 沒有可以接受的方法
然後客戶和服務器進入由選定認證方法所決定的子協商過程(sub-negotiation)。各種不同的方法的子協商過程的描述請參考各自的備忘錄。
開發者如果要為自己的方法得到一個方法號,可以聯繫IANA。可以參考關於已經被分配號碼的文檔以得到當前所有方法的列表和相應的協議。
符合本文檔的SOCKS V5實現必須支持GSSAPI,並且在將來支持用戶名/密碼認證方式。


4.請求
一旦子協商過程結束後,客戶端就發送詳細的請求信息。如果協商的方法中有以完整性檢查和/或安全性為目的的封裝,這些請求必須按照該方法所定義的方式進行封裝。
SOCKS請求的格式如下:
VER
CMD
RSV
ATYP
DST.ADDR
DST.PORT
1
1
X'00'
1
Variable
2
其中
? VER 協議版本: X'05'
? CMD
? CONNECT:X'01'
? BIND:X'02'
? UDP ASSOCIATE:X'03'
? RSV 保留
? ATYP 後面的地址類型
? IPV4:X'01'
? 域名:X'03'
? IPV6:X'04''
? DST.ADDR 目的地址
? DST.PORT 以網絡字節順序出現的端口號
SOCKS服務器會根據源地址和目的地址來分析請求,然後根據請求類型返回一個或多個應答。

5.地址
ATYP字段中描述了地址字段(DST.ADDR,BND.ADDR)所包含的地址類型:
? X'01'
基於IPV4的IP地址,4個字節長
? X'03'
基於域名的地址,地址字段中的第一字節是以字節為單位的該域名的長度,沒有結尾的NUL字節。
? X'04'
基於IPV6的IP地址,16個字節長


6.應答
一旦建立了一個到SOCKS服務器的連接,並且完成了認證方式的協商過程,客戶機將會發送一個SOCKS請求信息給服務器。服務器將會根據請求,以如下格式返回:
VER
REP
RSV
ATYP
BND.ADDR
BND.PORT
1
1
X'00'
1
Variable
2
其中:
? VER 協議版本: X'05'
? REP 應答字段:
? X'00' 成功
? X'01' 普通的SOCKS服務器請求失敗
? X'02' 現有的規則不允許的連接
? X'03' 網絡不可達
? X'04' 主機不可達
? X'05' 連接被拒
? X'06' TTL超時
? X'07' 不支持的命令
? X'08' 不支持的地址類型
? X'09' – X'FF' 未定義
? RSV 保留
? ATYP 後面的地址類型
? IPV4:X'01'
? 域名:X'03'
? IPV6:X'04'
? BND.ADDR 服務器綁定的地址
? BND.PORT 以網絡字節順序表示的服務器綁定的段口
標識為RSV的字段必須設為X'00'。
如果選中的方法中有以完整性檢查和/或安全性為目的的封裝,這些應答必須按照該方法所定義的方式進行封裝。

CONNECT
在對一個CONNECT命令的應答中,BND.PORT包含了服務器分配的用來連到目標機的端口號,
BND.ADDR則是相應的IP地址。由於SOCKS服務器通常有多個IP,應答中的BND.ADDR常和客戶端
連到SOCKS服務器的那個IP不同。
SOCKS服務器可以利用DST.ADDR和DST.PORT,以及客戶端源地址和端口來對一個CONNECT請
求進行分析。

BIND
BIND請求通常被用在那些要求客戶端接受來自服務器的連接的協議上。FTP是一個典型的例子。它建立一個從客戶端到服務器端的連接來執行命令以及接收狀態的報告,而使用另一個從服務
器到客戶端的連接來接收傳輸數據的要求(如LS,GET,PUT)。
建議只有在一個應用協議的客戶端在使用CONNECT命令建立主連接後才可以使用BIND命令建立第二個連接。建議SOCKS服務器使用DST.ADDR和DST.PORT來評價BIND請求。
在 一個BIND請求的操作過程中,SOCKS服務器要發送兩個應答給客戶端。當服務器建立並綁定一個新的套接口時發送第一個應答。BND.PORT字段包含 SOCKS服務器用來監聽進入的連接的端口號,BAND.ADDR字段包含了對應的IP地址。客戶端通常使用這些信息來告訴(通過主連接或控制連接)應用 服務器連接的匯接點。第二個應答僅發生在所期望到來的連接成功或失敗之後。在第二個應答中,BND.PORT和BND.ADDR字段包含了連上來的主機的 IP地址和端口號。

UDP ASSOCIATE
UDP ASSOCIATE請求通常是要求建立一個UDP轉發進程來控制到來的UDP數據報。DST.ADDR和DST.PORT 字段包含客戶端所希望的用來發送UDP數據報的IP地址和端口號。服務器可以使用這個信息來限制進入的連接。如果客戶端在發送這個請求時沒有地址和端口信 息,客戶端必須用全0來填充。
當與UDP相應的TCP連接中斷時,該UDP連接也必須中斷。
應答UDP ASSOCIATE請求時,BND.PORT 和BND.ADDR字段指明了客戶發送UDP消息至服務器的端口和地址。

應答處理
當 一個應答(REP值不等於00)指明出錯時,SOCKS服務器必須在發送完應答消息後一小段時間內終止TCP連接。這段時間應該在發現錯誤後少於10秒。 如果一個應答(REP值等於00)指明成功,並且請求是一個BIND或CONNECT時,客戶端就可以開始發送數據了。如果協商的認證方法中有以完整性、 認證和/或安全性為目的的封裝,這些請求必須按照該方法所定義的方式進行封裝。類似的,當以客戶機為目的地的數據到達SOCKS服務器
時,SOCKS服務器必須用正在使用的方法對這些數據進行封裝。


7.基於UDP協議的客戶
在UDP ASSOCIATE應答中由BND.PORT指明了服務器所使用的UDP端口,一個基於UDP協議的客戶必須發送數據報至UDP轉發服務器的該端口上。如 果協商的認證方法中有以完整性、認證和/或安全性為目的的封裝,這些數據報必須按照該方法所定義的方式進行封裝。每個UDP數據報都有一個UDP請求頭在 其首部:
RSV
FRAG
ATYP
DST.ADDR
DST.PORT
DATA
2
1
1
Variable
2
Variable
在UDP請求頭中的字段是:

? RSV 保留 X'0000'
? FRAG 當前的分段號
? ATYP 後面的地址類型
? IPV4:X'01'
? 域名:X'03'
? IPV6:X'04'
? DST.ADDR 目的地址
? DST.PORT 以網絡字節順序出現的端口號
? DATA 用戶數據
當一個UDP轉發服務器轉發一個UDP數據報時,不會發送任何通知給客戶端;同樣,它也將丟棄任何它不能發至遠端主機的數據報。當UDP轉發服務器從遠端服務器收到一個應答的數據報時,
必 須加上上述UDP請求頭,並對數據報進行封裝。UDP轉發服務器必須從SOCKS服務器得到期望的客戶端IP地址,並將數據報發送到 UDPASSOCIATE應答中給定的端口號。如果數據報從任何IP地址到來,而該IP地址與該特定連接中指定的IP地址不同,那麼該數據報會被丟棄。
FRAG字段指明數據報是否是一些分片中的一片。如果SOCKS服務器要實現這個功能,X'00'指明數據報是獨立的;其他則越大越是數據報的尾端。介於1到127之間的值說明了該分片在分片
序 列裡的位置。每個接收者都為這些分片提供一個重組隊列和一個重組的計時器。這個重組隊列必須在重組計時器超時後重新初始化,並丟棄相應的數據報。或者當一 個新到達的數據報有一個比當前在處理的數據報序列中最大的FRAG值要小時,也必須重新初始化從組隊列。重組計時器必須小於5秒。只要有可能,應用程序最 好不要使用分片。分片的實現是可選的;如果某實現不支持分片,所有FRAG字段不為0的數據報都必須被丟棄。
一個SOCKS的UDP編程界面(The programming interface for a SOCKS-aware UDP)必須報告當前可用UDP數據報緩存空間小於操作系統提供的實際空間。
? 如果 ATYP是 X'01' - 10+method_dependent octets smaller
? 如果 ATYP是X'03' - 262+method_dependent octets smaller
? 如果 ATYP是X'04' - 20+method_dependent octets smaller

8. 安全性考慮
這篇文檔描述了一個用來透過IP網絡防火牆的應用層協議。這種傳輸的安全性在很大程度上依賴於特定實現所擁有以及在SOCKS客戶與SOCKS服務器之間經協商所選定的特殊的認證和封裝方
式。
系統管理員需要對用戶認證方式的選擇進行仔細考慮。


9. 參考書目

[1] Koblas, D., "SOCKS", Proceedings: 1992 Usenix Security Symposium.


作者地址
Marcus Leech
Bell-Northern Research Ltd
P.O. Box 3511, Station C
Ottawa, ON
CANADA K1Y 4H7
Phone: (613) 763 - 9145
EMail: mleech@bnr.ca
RFC1929——SOCKETS V5 SOCKETS V5
RFC文檔中文翻譯計劃

SOCKS

SOCKS是一個代理伺服器,幫助內部的PC向外部的伺服器要求資料,並且將取的資料轉交給內部PC。這樣內部PC可以完全不和外部接觸。而達到firewall的功能。

內部PC向SOCKS Server提出需求,請求到外部Server XXX取得YYY資料。
SOCKS Server取得後,將資料傳會PC。

和NAT不一樣的是,NAT將內部PC的封包modify後送出,將收回的封包modify後送回PC。

Socksification:(讓你的application有使用Socks Proxy的能力)

SOCKSv5 reference Implementation中針對所有BSD的function都實作了一份有SOCKSv5能力的s類名函式,將一個application改成使用 SOCKSv5,只要在source code中加入一個#include ,然後link到SOCKSv5 Reference Implementation。

SOCKS firiendly guidlines:

1.讓syslog紀錄的program名稱正確(告訴SOCKS你真正的名子)

在main開始的地方,加入:
SOCKSinit(argv[0]);
這樣SOCKS library在client端的syslog中就會顯示真正的program名,而不會是SOCKS library的名子

2.將相關的function rename成SOCKS library提供的類同名函式

SOCKSv4:

compile 時加入以下define:
-Dconnect=Rconnect -Dgetsockname=Rgetsockname -Dgetpeername=Rgetpeername -Dbind=Rbind -Daccept=Raccept -Dlisten=Rlisten -Dselect=Rselect

SOCKSv5:

source code中要#include socks.h,然後在compile command加入
-DSOCKS

3.link適當的SOCKS library

在makefile,或是compile command中的link option加入socks library的path
並且指定link socks library

SOCKS4:

-L -lsocks

SOCKS5:

-L -lsocks5

範例:假設socks5 library path是 /usr/gjh/socks5

原來的build command:

% gcc -o foo foo.c

改成socks5的command:

% gcc -include /usr/gjh/socks5/include/socks.h -DSOCKS -L/usr/gjh/socks5/lib -lsocks5 -o foo foo.c


另外一種方法(沒有source code時)

利用系統share library的功能,執行runsocks這個script,這個script會load
socks5的share library,讓application呼叫到這個socks5 library的sock function,
而不會使用原來系統標準的sock library

NAT

由destination IP取得MAC (by broadcast或arp table,或gateway)。

browse:
client端自己開一個port(1024以上)來和http server的port 80溝通。
經過nat時,nat會把local的ip改為nat自己的ip,local port如果沒被使用,就不變,再轉送出去。
nat並且會在內部紀錄下local port與內部ip的對應,好讓待會reply封包傳送到這個port時,轉送給內部的ip。

第一個工作來了:說明一下web 通過firewall的方法

因為有一個產品沒有辦法通過公司的firewall,所以要說明一下在intranet的web server要如何通過firewall。

firewall有兩種,一是route兼的,一飾NAT兼的。
firewall一般只是用來檔port。

如果是用NAT,那麼外界就無法主動連到這個內部的device。
如果是用route,哪麼只要用沒有檔掉的port就可以由外部連到內部的port。

星期四, 6月 09, 2005

喔!厲害,是2G,不是256M

今天try了一下VMWare,他竟然說我最多可以用1.7G的RAM 。
? 1.7G ?我不是只有256M?因為我看見開頭是2。
所以回去查了一下.....
真真真的是2G!
我這被子還沒用過RAM這麼多的機器。

這機器果真是快,用vmware安裝rh9只要15min,比用我家裡的pc直接裝rh9還快。

裝完後dhcp沒辦法動作,只好用手動設定
#ifconfig eth0 10.3.5.233 netmask 255.255.252.0
#route add default gw 10.3.5.254
那.. dns呢?
New Phone No : (03) 3977399 - 7432

星期三, 6月 08, 2005

Winbond W90N740 linux site

http://server.bluewatersys.com/w90n740/index.php/Main_Page

利用router改裝成linux平台,包含arm9-jtag cable的製作方式。
和W90N740的patch.

S3C4510B 停產


..許多人最喜歡的arm 7 linuc學習版的chip停產了,2005六月後停止接受order.
據說samsung將整個network arm chip都停掉(其他pda, media 的arm還留著)。
是不是25XX和45XX的都停產?

Linux : scsi had installation

加入scsi card和hd

lspci
看看有沒有顯示出scsi card的資料。

modprobe aic7xxx.o
手動load scsi module。會自動load scsi_mod (scsi hd的module)

lsmod
看看有aic7xxx.o是不是有被load和使用scsi_mod.

scsi hard disk要使用,除了scsi card driver外,還要有scsi_mod和sd_mod兩個module.

星期二, 6月 07, 2005

試試skyeye

memo : 要帶的東西

vmware,要試uclinux。
軌跡球

目標

建立ARM平台。
小系統:a gateway to ethernet
大系統:system integration center

星期日, 6月 05, 2005

Another LiveCD : Puppy Linux

  • Puppy will easily install to USB, Zip or hard drive media.
  • Booting from CD, Puppy will load totally into RAM so that the CD drive is then free for other purposes.
  • Booting from CD, Puppy can save everything back to the CD, no need for a hard drive.
  • Booting from USB, Puppy will greatly minimise writes, to extend the life of Flash devices indefinitely.
  • Puppy will be extremely friendly for Linux newbies.
  • Puppy will boot up and run extraordinarily fast.
  • Puppy will have all the applications needed for daily use.
  • Puppy will just work, no hassles.
  • Puppy will breath new life into old PCs

星期六, 6月 04, 2005

Taiwan的Linux計畫

B2D 主要在於 "嘗試實證" 以下構想雛型:

  1. 小而美。
  2. 安裝容易 (0613 done!)
  3. 中文環境佳。
  4. 先採用 debian 套件(apt-get),它日再發展成自己的套件庫。
  5. 彈性大,採用模組化架構,可任意拆裝變形加入創意。
  6. 多用途:桌面、工作站、伺服器、無碟電腦教室應用。

勞健保投保薪資等級

勞保及健保投保薪資等級表

金額等級

薪資

勞保費

勞保費

健保費/

健保費

 

 

 

普通事故5.5%*70%+就業保險1%*70%+職災0.08%+墊償基金0.025%

91.09.01

91.09.01

1

15,840

206

737

216

770

2

16,500

215

768

225

802

3

17,400

226

810

238

846

4

18,300

238

852

250

889

5

19,200

249

894

262

933

6

20,100

261

936

274

977

7

21,000

273

978

287

1,020

8

21,900

285

1,019

299

1,064

9

22,800

297

1,061

311

1,108

10

24,000

312

1,117

328

1,166

11

25,200

327

1,173

344

1,225

12

26,400

343

1,229

360

1,283

13

27,600

359

1,285

377

1,341

14

28,800

375

1,341

393

1,400

15

30,300

394

1,410

414

1,472

16

31,800

414

1,480

434

1,545

17

33,300

433

1,550

455

1,618

18

34,800

453

1,620

475

1,691

19

36,300

472

1,690

495

1,764

20

38,200

496

1,778

521

1,856

21

40,100

521

1,867

547

1,949

22

42,000

546

1,955

573

2,041

23

43,900

599

2,133

24

45,800

625

2,226

25

48,200

658

2,342

26

50,600

691

2,459

27

53,000

723

2,575

28

55,400

756

2,692

29

57,800

789

2,809

30

60,800

830

2,955

31

63,800

871

3,100

32

66,800

912

3,246

33

69,800

953

3,392

34

72,800

994

3,538

35

76,500

1,044

3,717

36

80,200

1,095

3,897

37

83,900

1,145

4,077

38

87,600

1,196

4,257

39

92,100

 

 

1,257

4,476

40

96,600

 

 

1,319

4,694

41

101,100

 

 

1,380

4,913

42

105,600

 

 

1,441

5,132

43

110,100

 

 

1,503

5,350

44

115,500

 

 

1,577

5,613

45

120,900

 

 

1,650

5,875

46

126,300

 

 

1,724

6,137

47

131,700

 

 

1,798

6,400

備註: 員工健保費 = 健保費/ * 眷屬人口數


網誌存檔