夏躍偉 牛文倩 劉金廣
摘 要: 目前,SYN FLOOD攻擊占70%~80%。IP欺騙是常用的方式,如何防止IP欺騙的SYN攻擊成為研究熱點(diǎn)。設(shè)計(jì)是以redhat 5.0 為平臺(tái),結(jié)合RED算法設(shè)計(jì)并實(shí)現(xiàn)一個(gè)抗SYN攻擊的包過濾防火墻,該防火墻在輕度和中度攻擊的情況下判斷一個(gè)數(shù)據(jù)包的丟棄概率,當(dāng)被丟棄則保存該數(shù)據(jù)包到哈希表中,主機(jī)等待客戶機(jī)重傳TCP連接請(qǐng)求,檢測(cè)是否是真實(shí)性的IP地址,經(jīng)過分析研究和實(shí)驗(yàn)的驗(yàn)證具有較好的吞吐量,同時(shí)正常數(shù)據(jù)包的通過率很高。當(dāng)遭受的是重度攻擊時(shí),則直接采用的是RED中的隨機(jī)丟棄數(shù)據(jù)包。
關(guān)鍵詞: 防火墻; SYN攻擊; RED算法; 哈希表
中圖分類號(hào): TN915.08?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)09?0083?03
0 引 言
隨著網(wǎng)絡(luò)的發(fā)展,網(wǎng)絡(luò)攻擊的手段越來越多,其中以IP欺騙形式的SYN攻擊所占的比例較大,眾多的專家學(xué)者都致力于研究如何有效控制SYN攻擊[1]。也提出了較多的方法,例如狀態(tài)檢測(cè)算法,該算法主要是利用TCP連接過程中的幾個(gè)狀態(tài)[2],判斷是否是攻擊性數(shù)據(jù)包,但是該算法存在一些缺陷,對(duì)每個(gè)數(shù)據(jù)包都要檢測(cè)其狀態(tài),而且要保存較多的數(shù)據(jù)包信息,這對(duì)系統(tǒng)的吞吐量和內(nèi)存都有較大的影響。因此,本實(shí)驗(yàn)防火墻致力于提高正常包的通過率,以及系統(tǒng)吞吐量。對(duì)于輕度和中度攻擊時(shí)的系統(tǒng)性能有很大的提高。
1 系統(tǒng)相關(guān)知識(shí)
1.1 防火墻
防火墻是防止網(wǎng)絡(luò)攻擊的主要手段之一,目前的防火墻得到很大的發(fā)展,它防止外部網(wǎng)絡(luò)對(duì)內(nèi)部網(wǎng)絡(luò)的攻擊,一個(gè)防火墻的參考模型如圖1所示。
圖1 防火墻模型
1.2 RED算法
RED算法[3]利用當(dāng)前隊(duì)列的平均長度計(jì)算數(shù)據(jù)包的丟棄概率,如圖2所示,具體由三個(gè)原則確定:
(1) 當(dāng)平均隊(duì)列長度[Lav]小于給定的數(shù)據(jù)包隊(duì)列長度最小門限值minth時(shí),數(shù)據(jù)包丟棄概率[P=0;]
(2) 當(dāng)平均隊(duì)列長度[Lav]大于給定的數(shù)據(jù)包隊(duì)列長度最大門限值maxth時(shí),數(shù)據(jù)包的丟棄概率[P=1;]
(3) 當(dāng)平均隊(duì)列長度在minth和maxth之間,數(shù)據(jù)包的丟棄概率在0~1之間。而且[P=max*][(Q-Min)(maxth-minth)。]
圖2 數(shù)據(jù)包丟棄概率[P]和兩個(gè)門限值的關(guān)系圖
2 總體設(shè)計(jì)
因?yàn)镮P欺騙形式的SYN攻擊,是采用的偽造IP地址和端口,主機(jī)發(fā)送ACK數(shù)據(jù)包,攻擊機(jī)器是不會(huì)做出回應(yīng)的[4]。所以判斷正常包就可以讓客戶機(jī)其超時(shí)重傳,從而檢測(cè)是否是真實(shí)IP。防火墻的設(shè)計(jì)主要是針對(duì)SYN請(qǐng)求數(shù)據(jù)包,利用RED算法計(jì)算當(dāng)前的TCP連接請(qǐng)求數(shù)據(jù)包到來時(shí)的TCP緩沖區(qū)的平均隊(duì)列長度[Q,]如果平均隊(duì)列長度[Q]小于給定的最小隊(duì)列門限值minth,則說明當(dāng)前沒有SYN攻擊或者只有少數(shù)的SYN數(shù)據(jù)包,這種情況下不會(huì)影響本機(jī)性能,可以直接接收數(shù)據(jù)包。如果平均隊(duì)列長度大于最大門限值maxth,說明當(dāng)前遭受到較強(qiáng)的SYN攻擊,則隨機(jī)的丟棄數(shù)據(jù)包。如果平均隊(duì)列長度在最小門限minth和最大門限值maxth之間,則計(jì)算當(dāng)前數(shù)據(jù)包的隨機(jī)丟棄概率[P,]如果[P]小于給定的閾值[Pm,]則接收數(shù)據(jù)包,如果[P]大于給定的閾值,則先到哈希表中查找是否存在相同數(shù)據(jù)包信息的元素(哈希表存放的是被丟棄的數(shù)據(jù)包的相關(guān)信息),如果找到則接收數(shù)據(jù)包到本機(jī),如果沒有找到則保存數(shù)據(jù)包相關(guān)信息到哈希表中,同時(shí)丟棄該數(shù)據(jù)包??傮w設(shè)計(jì)如圖3所示。
3 防火墻關(guān)鍵技術(shù)實(shí)現(xiàn)
3.1 包檢測(cè)模塊
采用RED算法實(shí)現(xiàn)對(duì)數(shù)據(jù)包的處理,判斷進(jìn)入到主機(jī)的TCP連接請(qǐng)求數(shù)據(jù)包的丟棄概率,首先要定義RED算法中用到的參數(shù):
struct red_parms{
/* Parameters */
u32 limit; /*隊(duì)列長度上限*/
u32 qth_min; /*算法需要的兩個(gè)門限值*/
u32 qth_max;
u32 Rmask;
u32 Scell_max; /*最大空閑時(shí)間*/
unsigned char flags;
char Wlog; /*log(W)*/
char Plog; /*random number bits*/
char Scell_log;
u8 Stab[256];
unsigned long qave; /*平均隊(duì)列長度*/
int qcount; /*上次丟棄分組后收到的分組個(gè)數(shù)*/
u32 qR; /*Cached random number*/
psched_time_t qidlestart; /*隊(duì)列空間開始時(shí)間*/
struct tc_red_xstats st;
};
圖3 SYN防火墻總體設(shè)計(jì)
隊(duì)列的平均長度是判斷丟棄概率的關(guān)鍵因素,利用函數(shù)red_cmp_thresh實(shí)現(xiàn)RED算法的隊(duì)列長度判斷,對(duì)于不同的返回值,計(jì)算丟棄概率。
static inline int red_cmp_thresh(struct red_parms *p, unsigned long qavg)
{
if (qavg < p?>qth_min)
return RED_BELOW_MIN_THRESH;
else if (qavg >= p->qth_max)
return RED_ABOVE_MAX_TRESH;
else
return RED_BETWEEN_TRESH;
}
針對(duì)不同的隊(duì)列長度,計(jì)算出當(dāng)前數(shù)據(jù)包的丟棄概率:
static inline int red_action(struct red_parms *p, unsigned long qavg)
{
switch (red_cmp_thresh(p, qavg)) {
case RED_BELOW_MIN_THRESH:
p->qcount = -1;
return RED_DONT_MARK;
case RED_BETWEEN_TRESH:
if (++p->qcount) {
if (red_mark_probability(p, qavg)) {
p->qcount = 0;
p->qR = red_random(p);
}
} else
p->qR = red_random(p);
}
3.2 哈希表
一個(gè)TCP連接請(qǐng)求數(shù)據(jù)包的丟棄概率經(jīng)過上面的函數(shù)計(jì)算以后,根據(jù)和預(yù)定的概率值進(jìn)行比較,如果概率小于給定的閾值,則接收數(shù)據(jù)包通過主機(jī),如果概率大于給定閾值,則到哈希表中進(jìn)行查找,哈希表中存在相同的數(shù)據(jù)包信息則接收數(shù)據(jù)包進(jìn)入主機(jī),如果不存在則刪除數(shù)據(jù)包,同時(shí)保存數(shù)據(jù)包的相關(guān)信息到哈希表中。
定義哈希結(jié)構(gòu)PACK_hash,為了方便系統(tǒng)的快速查找,在這里將其定義為大小為4 096的哈希數(shù)組。
進(jìn)行哈希函數(shù)的查找和插入的哈希函數(shù),可以利用數(shù)據(jù)包的源地址表示,將源地址的前16位和后16位相加,得到的結(jié)果除留余數(shù),具體的函數(shù)可以是:
hash_key(struct iphdr src)
{
u16 hashavl,hashky;
hashavl=(u16)(src->saddr>>16+src->saddr&&0x0000ffff);
hashky=hashkvl%32;
//采用32取余數(shù),能夠較好地防止哈希沖突
}
3.3 數(shù)據(jù)包信息結(jié)構(gòu)和定時(shí)器
在后面的處理過程中,只用到了數(shù)據(jù)包的源地址和目的地址,所以可以定義數(shù)據(jù)包的信息結(jié)構(gòu):
struct PACK_info
{
struct list_head pack_list; //哈希沖突時(shí),存儲(chǔ)為一個(gè)鏈表
struct iphdr src,drc; //表示數(shù)據(jù)包的源地址
struct timer_list time;
//定時(shí)器,防止哈希表一直被填滿,到達(dá)時(shí)間就刪除這個(gè)節(jié)點(diǎn)
u16 spt,dpt ; //數(shù)據(jù)包的源端口和目的端口
}
內(nèi)核中提供了對(duì)定時(shí)器處理函數(shù)[5]如下:
void init_timer(struct timer_list *timer)
//初始化定時(shí)器隊(duì)列結(jié)構(gòu)
vod add_timer(struct timer_list *timer) //啟動(dòng)定時(shí)器
int del_timer(struct timer_list *timer)
//啟動(dòng)定時(shí)器前將它刪除,因?yàn)樵诔瑫r(shí)后系統(tǒng)會(huì)自動(dòng)
將它刪除
3.4 數(shù)據(jù)包匹配
數(shù)據(jù)包在哈希表中查找相應(yīng)的節(jié)點(diǎn),匹配數(shù)據(jù)包的源地址和目的地址是否相同。
基于數(shù)據(jù)包的源IP 地址進(jìn)行匹配:
static int check_spkt(struct PACK_info *skb)
{
if (! skb )
return NF_ACCEPT;
if ((skb->src->saddr >= htonl(fw_deny.sipf)) && (skb->src->saddr <= htonl(fw_deny.sipt)))
return NF_DROP;
return NF_ACCEPT;
}
基于數(shù)據(jù)包的目的IP地址進(jìn)行匹配:
static int check_dpk(struct sk_buff *skb)
{
if (! skb )
return NF_ACCEPT;
if ((skb->drc->daddr >= htonl(fw_deny.sipf)) && (skb->
drc->daddr <= htonl(fw_deny.dipt)) )
return NF_DROP;
return NF_ACCEPT;
}
4 結(jié) 論
本防火墻的設(shè)計(jì)采用的擁塞控制算法RED算法,同時(shí)利用了哈希表相關(guān)知識(shí)。構(gòu)建了一個(gè)簡(jiǎn)單實(shí)用的小型防止IP地址欺騙的SYN攻擊的防火墻,經(jīng)過試驗(yàn)測(cè)試,該防火墻在輕度和重度攻擊時(shí),有較好的防御能力,正常包的通過率保持在98%左右,系統(tǒng)性能較好,吞吐量較大。
參考文獻(xiàn)
[1] 周劍嵐,馮珊.運(yùn)用hook技術(shù)實(shí)現(xiàn)的軟件防火墻[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2004,32(3):83?85.
[2] 毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,2001.
[3] 陳軍,陳志剛.主動(dòng)隊(duì)列管理RED算法的改進(jìn)與實(shí)驗(yàn)仿真研究[J].計(jì)算機(jī)工程,2006,9(6):44?47.
[4] POTTER B. Open source firewall alternatives [J]. Network Security, 2006, 18(6): 16?17.
[5] 丁曉波,桑楠,張寧.Linux 2.6內(nèi)核的內(nèi)核對(duì)象機(jī)制分析[J].計(jì)算機(jī)應(yīng)用,2005,25(1):76?84.
[6] 何映,覃以威,李丹.基于Windows內(nèi)核態(tài)個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012,35(6):49?52.
{
if (qavg < p?>qth_min)
return RED_BELOW_MIN_THRESH;
else if (qavg >= p->qth_max)
return RED_ABOVE_MAX_TRESH;
else
return RED_BETWEEN_TRESH;
}
針對(duì)不同的隊(duì)列長度,計(jì)算出當(dāng)前數(shù)據(jù)包的丟棄概率:
static inline int red_action(struct red_parms *p, unsigned long qavg)
{
switch (red_cmp_thresh(p, qavg)) {
case RED_BELOW_MIN_THRESH:
p->qcount = -1;
return RED_DONT_MARK;
case RED_BETWEEN_TRESH:
if (++p->qcount) {
if (red_mark_probability(p, qavg)) {
p->qcount = 0;
p->qR = red_random(p);
}
} else
p->qR = red_random(p);
}
3.2 哈希表
一個(gè)TCP連接請(qǐng)求數(shù)據(jù)包的丟棄概率經(jīng)過上面的函數(shù)計(jì)算以后,根據(jù)和預(yù)定的概率值進(jìn)行比較,如果概率小于給定的閾值,則接收數(shù)據(jù)包通過主機(jī),如果概率大于給定閾值,則到哈希表中進(jìn)行查找,哈希表中存在相同的數(shù)據(jù)包信息則接收數(shù)據(jù)包進(jìn)入主機(jī),如果不存在則刪除數(shù)據(jù)包,同時(shí)保存數(shù)據(jù)包的相關(guān)信息到哈希表中。
定義哈希結(jié)構(gòu)PACK_hash,為了方便系統(tǒng)的快速查找,在這里將其定義為大小為4 096的哈希數(shù)組。
進(jìn)行哈希函數(shù)的查找和插入的哈希函數(shù),可以利用數(shù)據(jù)包的源地址表示,將源地址的前16位和后16位相加,得到的結(jié)果除留余數(shù),具體的函數(shù)可以是:
hash_key(struct iphdr src)
{
u16 hashavl,hashky;
hashavl=(u16)(src->saddr>>16+src->saddr&&0x0000ffff);
hashky=hashkvl%32;
//采用32取余數(shù),能夠較好地防止哈希沖突
}
3.3 數(shù)據(jù)包信息結(jié)構(gòu)和定時(shí)器
在后面的處理過程中,只用到了數(shù)據(jù)包的源地址和目的地址,所以可以定義數(shù)據(jù)包的信息結(jié)構(gòu):
struct PACK_info
{
struct list_head pack_list; //哈希沖突時(shí),存儲(chǔ)為一個(gè)鏈表
struct iphdr src,drc; //表示數(shù)據(jù)包的源地址
struct timer_list time;
//定時(shí)器,防止哈希表一直被填滿,到達(dá)時(shí)間就刪除這個(gè)節(jié)點(diǎn)
u16 spt,dpt ; //數(shù)據(jù)包的源端口和目的端口
}
內(nèi)核中提供了對(duì)定時(shí)器處理函數(shù)[5]如下:
void init_timer(struct timer_list *timer)
//初始化定時(shí)器隊(duì)列結(jié)構(gòu)
vod add_timer(struct timer_list *timer) //啟動(dòng)定時(shí)器
int del_timer(struct timer_list *timer)
//啟動(dòng)定時(shí)器前將它刪除,因?yàn)樵诔瑫r(shí)后系統(tǒng)會(huì)自動(dòng)
將它刪除
3.4 數(shù)據(jù)包匹配
數(shù)據(jù)包在哈希表中查找相應(yīng)的節(jié)點(diǎn),匹配數(shù)據(jù)包的源地址和目的地址是否相同。
基于數(shù)據(jù)包的源IP 地址進(jìn)行匹配:
static int check_spkt(struct PACK_info *skb)
{
if (! skb )
return NF_ACCEPT;
if ((skb->src->saddr >= htonl(fw_deny.sipf)) && (skb->src->saddr <= htonl(fw_deny.sipt)))
return NF_DROP;
return NF_ACCEPT;
}
基于數(shù)據(jù)包的目的IP地址進(jìn)行匹配:
static int check_dpk(struct sk_buff *skb)
{
if (! skb )
return NF_ACCEPT;
if ((skb->drc->daddr >= htonl(fw_deny.sipf)) && (skb->
drc->daddr <= htonl(fw_deny.dipt)) )
return NF_DROP;
return NF_ACCEPT;
}
4 結(jié) 論
本防火墻的設(shè)計(jì)采用的擁塞控制算法RED算法,同時(shí)利用了哈希表相關(guān)知識(shí)。構(gòu)建了一個(gè)簡(jiǎn)單實(shí)用的小型防止IP地址欺騙的SYN攻擊的防火墻,經(jīng)過試驗(yàn)測(cè)試,該防火墻在輕度和重度攻擊時(shí),有較好的防御能力,正常包的通過率保持在98%左右,系統(tǒng)性能較好,吞吐量較大。
參考文獻(xiàn)
[1] 周劍嵐,馮珊.運(yùn)用hook技術(shù)實(shí)現(xiàn)的軟件防火墻[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2004,32(3):83?85.
[2] 毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,2001.
[3] 陳軍,陳志剛.主動(dòng)隊(duì)列管理RED算法的改進(jìn)與實(shí)驗(yàn)仿真研究[J].計(jì)算機(jī)工程,2006,9(6):44?47.
[4] POTTER B. Open source firewall alternatives [J]. Network Security, 2006, 18(6): 16?17.
[5] 丁曉波,桑楠,張寧.Linux 2.6內(nèi)核的內(nèi)核對(duì)象機(jī)制分析[J].計(jì)算機(jī)應(yīng)用,2005,25(1):76?84.
[6] 何映,覃以威,李丹.基于Windows內(nèi)核態(tài)個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012,35(6):49?52.
{
if (qavg < p?>qth_min)
return RED_BELOW_MIN_THRESH;
else if (qavg >= p->qth_max)
return RED_ABOVE_MAX_TRESH;
else
return RED_BETWEEN_TRESH;
}
針對(duì)不同的隊(duì)列長度,計(jì)算出當(dāng)前數(shù)據(jù)包的丟棄概率:
static inline int red_action(struct red_parms *p, unsigned long qavg)
{
switch (red_cmp_thresh(p, qavg)) {
case RED_BELOW_MIN_THRESH:
p->qcount = -1;
return RED_DONT_MARK;
case RED_BETWEEN_TRESH:
if (++p->qcount) {
if (red_mark_probability(p, qavg)) {
p->qcount = 0;
p->qR = red_random(p);
}
} else
p->qR = red_random(p);
}
3.2 哈希表
一個(gè)TCP連接請(qǐng)求數(shù)據(jù)包的丟棄概率經(jīng)過上面的函數(shù)計(jì)算以后,根據(jù)和預(yù)定的概率值進(jìn)行比較,如果概率小于給定的閾值,則接收數(shù)據(jù)包通過主機(jī),如果概率大于給定閾值,則到哈希表中進(jìn)行查找,哈希表中存在相同的數(shù)據(jù)包信息則接收數(shù)據(jù)包進(jìn)入主機(jī),如果不存在則刪除數(shù)據(jù)包,同時(shí)保存數(shù)據(jù)包的相關(guān)信息到哈希表中。
定義哈希結(jié)構(gòu)PACK_hash,為了方便系統(tǒng)的快速查找,在這里將其定義為大小為4 096的哈希數(shù)組。
進(jìn)行哈希函數(shù)的查找和插入的哈希函數(shù),可以利用數(shù)據(jù)包的源地址表示,將源地址的前16位和后16位相加,得到的結(jié)果除留余數(shù),具體的函數(shù)可以是:
hash_key(struct iphdr src)
{
u16 hashavl,hashky;
hashavl=(u16)(src->saddr>>16+src->saddr&&0x0000ffff);
hashky=hashkvl%32;
//采用32取余數(shù),能夠較好地防止哈希沖突
}
3.3 數(shù)據(jù)包信息結(jié)構(gòu)和定時(shí)器
在后面的處理過程中,只用到了數(shù)據(jù)包的源地址和目的地址,所以可以定義數(shù)據(jù)包的信息結(jié)構(gòu):
struct PACK_info
{
struct list_head pack_list; //哈希沖突時(shí),存儲(chǔ)為一個(gè)鏈表
struct iphdr src,drc; //表示數(shù)據(jù)包的源地址
struct timer_list time;
//定時(shí)器,防止哈希表一直被填滿,到達(dá)時(shí)間就刪除這個(gè)節(jié)點(diǎn)
u16 spt,dpt ; //數(shù)據(jù)包的源端口和目的端口
}
內(nèi)核中提供了對(duì)定時(shí)器處理函數(shù)[5]如下:
void init_timer(struct timer_list *timer)
//初始化定時(shí)器隊(duì)列結(jié)構(gòu)
vod add_timer(struct timer_list *timer) //啟動(dòng)定時(shí)器
int del_timer(struct timer_list *timer)
//啟動(dòng)定時(shí)器前將它刪除,因?yàn)樵诔瑫r(shí)后系統(tǒng)會(huì)自動(dòng)
將它刪除
3.4 數(shù)據(jù)包匹配
數(shù)據(jù)包在哈希表中查找相應(yīng)的節(jié)點(diǎn),匹配數(shù)據(jù)包的源地址和目的地址是否相同。
基于數(shù)據(jù)包的源IP 地址進(jìn)行匹配:
static int check_spkt(struct PACK_info *skb)
{
if (! skb )
return NF_ACCEPT;
if ((skb->src->saddr >= htonl(fw_deny.sipf)) && (skb->src->saddr <= htonl(fw_deny.sipt)))
return NF_DROP;
return NF_ACCEPT;
}
基于數(shù)據(jù)包的目的IP地址進(jìn)行匹配:
static int check_dpk(struct sk_buff *skb)
{
if (! skb )
return NF_ACCEPT;
if ((skb->drc->daddr >= htonl(fw_deny.sipf)) && (skb->
drc->daddr <= htonl(fw_deny.dipt)) )
return NF_DROP;
return NF_ACCEPT;
}
4 結(jié) 論
本防火墻的設(shè)計(jì)采用的擁塞控制算法RED算法,同時(shí)利用了哈希表相關(guān)知識(shí)。構(gòu)建了一個(gè)簡(jiǎn)單實(shí)用的小型防止IP地址欺騙的SYN攻擊的防火墻,經(jīng)過試驗(yàn)測(cè)試,該防火墻在輕度和重度攻擊時(shí),有較好的防御能力,正常包的通過率保持在98%左右,系統(tǒng)性能較好,吞吐量較大。
參考文獻(xiàn)
[1] 周劍嵐,馮珊.運(yùn)用hook技術(shù)實(shí)現(xiàn)的軟件防火墻[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2004,32(3):83?85.
[2] 毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,2001.
[3] 陳軍,陳志剛.主動(dòng)隊(duì)列管理RED算法的改進(jìn)與實(shí)驗(yàn)仿真研究[J].計(jì)算機(jī)工程,2006,9(6):44?47.
[4] POTTER B. Open source firewall alternatives [J]. Network Security, 2006, 18(6): 16?17.
[5] 丁曉波,桑楠,張寧.Linux 2.6內(nèi)核的內(nèi)核對(duì)象機(jī)制分析[J].計(jì)算機(jī)應(yīng)用,2005,25(1):76?84.
[6] 何映,覃以威,李丹.基于Windows內(nèi)核態(tài)個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012,35(6):49?52.