国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C#的Windows窗體端口掃描程序分析

2017-03-06 23:30:29沈?qū)m新
軟件導(dǎo)刊 2017年1期
關(guān)鍵詞:語言

沈?qū)m新

摘要摘要:C#語言一方面繼承了C 語言和C++ 語言簡潔高效的優(yōu)點(diǎn),另一方面吸收了JAVA語言面向?qū)ο蟮脑O(shè)計(jì)思想,是目前主流的編程語言之一。C#語言可以高效便捷地開發(fā)各種應(yīng)用程序,微軟公司提供了完備的類庫以方便程序員開發(fā)。在網(wǎng)絡(luò)開發(fā)方面,端口掃描程序是網(wǎng)絡(luò)軟件常用的功能模塊。通過分析端口掃描程序中出現(xiàn)的問題,找出問題產(chǎn)生的原因,提出相應(yīng)解決辦法,對采用C#語言開發(fā)類似軟件有一定的參考作用。

關(guān)鍵詞關(guān)鍵詞:C#語言;網(wǎng)絡(luò)軟件;端口掃描

DOIDOI:10.11907/rjdk.162211

中圖分類號:TP312文獻(xiàn)標(biāo)識碼:A文章編號文章編號:16727800(2017)001003803

0引言

C#語言是目前主流的編程語言之一。它采用控件事件來綁定窗體方法,實(shí)現(xiàn)了消息的便捷傳遞,大大簡化了窗體程序的編寫,使程序員可以專注于業(yè)務(wù)邏輯開發(fā),不必花費(fèi)時(shí)間在消息路由上。本文采用C#語言實(shí)現(xiàn)一個(gè)具有WinForm窗體的端口掃描程序,并重點(diǎn)分析可能出現(xiàn)的幾個(gè)問題,為開發(fā)者提供參考。1端口掃描程序原理

端口掃描作為網(wǎng)絡(luò)安全掃描的核心技術(shù)之一,廣泛應(yīng)用于網(wǎng)絡(luò)掃描器中,如著名的Namp和Nessus。在計(jì)算機(jī)中,一個(gè)端口就是一個(gè)潛在的通信通道,對目標(biāo)計(jì)算機(jī)進(jìn)行端口掃描,可使用戶了解本機(jī)對外界提供了哪些服務(wù),從而為管理網(wǎng)絡(luò)提供參考。

端口掃描技術(shù)原理[1]:向目標(biāo)計(jì)算機(jī)的TCP/IP服務(wù)算法的基礎(chǔ)上加上T-BCJR的復(fù)雜度,而高信噪比時(shí),錯(cuò)誤幀數(shù)量少,此時(shí)的復(fù)雜度基本接近SOVA算法??傮w上,改進(jìn)譯碼算法的復(fù)雜度與SOVA算法相近。

4結(jié)語

連續(xù)相位調(diào)制是一種先進(jìn)的調(diào)制技術(shù),近年來在通信、遙感等領(lǐng)域得到廣泛重視。本文介紹了連續(xù)相位調(diào)制系統(tǒng)的主要譯碼算法,并針對算法的局限性在高斯白噪聲信道下給出了一種改進(jìn)的算法。通過仿真驗(yàn)證了該算法的可行性,當(dāng)誤比特率達(dá)到104時(shí),改進(jìn)譯碼的信噪比只比BCJR算法低0.15dB左右,復(fù)雜度也大大降低。

斷服務(wù)端口是打開還是關(guān)閉,得到端口提交的服務(wù)和信息。端口掃描的常見種類有TCP SIN掃描、TCP Connect掃描、秘密掃描和其它掃描。掃描分類如圖1所示。

本文使用其中的TCP connect 掃描,它是最基本的TCP掃描。操作系統(tǒng)提供connect()系統(tǒng)調(diào)用,用來與每個(gè)感興趣的目標(biāo)計(jì)算機(jī)端口連接。如果端口處于偵聽狀態(tài),那么connect()就能成功。否則,這個(gè)端口不能用,即沒有提供服務(wù)。這種技術(shù)最大的優(yōu)點(diǎn)是不需要任何權(quán)限,系統(tǒng)中的任何用戶都有權(quán)使用這個(gè)調(diào)用;另一個(gè)好處就是速度:如果對每個(gè)目標(biāo)端口以線性方式使用單獨(dú)的connect()調(diào)用,會花費(fèi)相當(dāng)長的時(shí)間,而這里可以同時(shí)打開多個(gè)套接字,從而加速掃描。

2端口掃描程序設(shè)計(jì)

本開發(fā)除了系統(tǒng)提供的默認(rèn)命名空間和窗體命名空間外,還要用到和網(wǎng)絡(luò)開發(fā)和線程開發(fā)相關(guān)的命名空間。主要流程是在掃描窗體界面中設(shè)定目標(biāo)主機(jī)IP地址和掃描端口范圍[2-3],在主線程中啟動多個(gè)線程來掃描端口。2.1命名空間和類

涉及的網(wǎng)絡(luò)相關(guān)命名空間包括System.net命名空間,要使用其中的IPAddress類和IPEndPoint類來構(gòu)建統(tǒng)一、簡單的網(wǎng)絡(luò)編程接口。使用System.Net.Sockets命名空間中的Socket類來實(shí)現(xiàn)Berkeley套接字。引用System.Threading命名空間,使用其中的Thread類來實(shí)現(xiàn)多個(gè)線程同時(shí)掃描端口以加快掃描速度。2.2端口掃描程序流程

啟動多個(gè)線程,在線程中開始掃描端口,掃描程序中設(shè)定的套接字,以目標(biāo)主機(jī)和端口為端點(diǎn)執(zhí)行TCP connect方法。執(zhí)行后,通過判斷套接字的Connected屬性來確定端口是否開放。主要流程如圖2所示。

3端口掃描程序中的問題及分析

對掃描程序進(jìn)行測試。首先在局域網(wǎng)IP地址為10.110.32.16的主機(jī)上開放80端口,然后啟動掃描程序,在目標(biāo)IP中填入10.110.32.16,端口選擇79到80端口,點(diǎn)擊開始掃描。3.1掃描端口不能顯示

盡管已經(jīng)開放了80端口,可是掃描后并沒有發(fā)現(xiàn)該端口被寫入相應(yīng)控件,但確實(shí)調(diào)用了Listbox控件的Items集合屬性的add方法并添加了具體的開放端口。經(jīng)過分析,C#在UI線程創(chuàng)建子線程操作UI控件時(shí),也就是在UI 線程以外的子線程操作UI控件時(shí),系統(tǒng)引發(fā)了一個(gè)InvalidOperationException異常,因?yàn)樵L問 Windows 窗體控件本質(zhì)上不是安全線程。如果有兩個(gè)或多個(gè)線程操作某一控件,則可能會迫使該控件進(jìn)入一種不一致狀態(tài),還可能出現(xiàn)其它與線程相關(guān)的錯(cuò)誤,包括爭用和死鎖。因此,確保以線程安全方式訪問控件非常重要。解決這個(gè)問題有3種方法[4-5]:

(1)在窗體Load方法中設(shè)置CheckForIllegalCrossThreadCalls為false,不檢查交叉線程調(diào)用,直接忽視InvalidOperationException異常,此法不推薦使用。

(2)利用委托來實(shí)現(xiàn)。在窗體函數(shù)中定義委托AppendStringDelegate,同時(shí)定義委托方法addString來觸發(fā)。把原來在線程中的通過控件添加的方法調(diào)用,修改為通過addString方法修改控件,以避免線程沖突,關(guān)鍵代碼如下:

(3)通過使用 BackgroundWorker 組件實(shí)現(xiàn)多線程的交叉引用。BackgroundWorker組件非常適合在后臺運(yùn)行任務(wù)前臺顯示結(jié)果的應(yīng)用場景,而且提供了完善的取消工作、報(bào)告進(jìn)度和異常處理功能,解決了跨線程訪問可視化組件問題。輔助線程運(yùn)行 DoWork 事件處理程序,在掃描按鈕點(diǎn)擊事件中調(diào)用方法RunWorkerAsync完成后臺線程異步觸發(fā)。

本文推薦使用第(2)或第(3)種方法來解決上述問題。3.2掃描端口結(jié)果重復(fù)顯示

采用上述委托處理線程訪問UI中控件,發(fā)現(xiàn)在Listbox控件中掃描結(jié)果出現(xiàn)兩次“端口開放80”字樣。端口掃描代碼在窗體類中定義一個(gè)類變量portnow,在掃描程序中通過一個(gè)for循環(huán)來啟動多個(gè)線程,執(zhí)行從開始端口到終止端口的掃描,在循環(huán)中將i值賦給portnow。因?yàn)閜ortnow是類變量,在線程中根據(jù)portnow的值確定掃描端口,代碼看似沒有問題,但經(jīng)過跟蹤分析,發(fā)現(xiàn)線程在執(zhí)行掃描79端口時(shí),UI主線程繼續(xù)執(zhí)行,并不會等待,此時(shí),i值修改為80,又啟動下一個(gè)線程掃描80端口,而此時(shí)掃描79端口的線程也才剛剛為portnow賦值,因此出現(xiàn)了兩次都是連接80端口的情況。圖3中,通過跟蹤線程堆棧發(fā)現(xiàn),在切換掃描79號端口線程時(shí),UI線程繼續(xù)執(zhí)行,i值被修改,導(dǎo)致一開始就執(zhí)行掃描79號端口,portnow值就變成80,造成重復(fù)連接80端口問題。為了解決線程調(diào)用中portnow和所掃描端口不同步問題,考慮把i值作為一個(gè)參數(shù)傳給線程,更簡單的方法是直接把線程命名為i值。同時(shí),在掃描程序中通過下列代碼實(shí)現(xiàn)portnow同步獲取:

4結(jié)語

本文通過C#語言端口掃描程序設(shè)計(jì)與實(shí)現(xiàn),分析了程序中出現(xiàn)的問題,對端口掃描結(jié)果不能出現(xiàn)、端口掃描結(jié)果重復(fù)出現(xiàn)問題進(jìn)行了分析,提出了相應(yīng)的解決方法,提示C#編程者進(jìn)一步了解網(wǎng)絡(luò)編程中線程使用的注意要點(diǎn),避免發(fā)生線程使用不當(dāng)導(dǎo)致程序無法正常運(yùn)行,對類似系統(tǒng)實(shí)現(xiàn)提供了有益的參考。

參考文獻(xiàn):

[1]譚逸逸.常見的端口掃描類[EB/OL].http://360doc.com/content/12/0302/13/3725126_191092221.shtml.

[2]陳青華.C#網(wǎng)絡(luò)開發(fā)項(xiàng)目教程[M] .北京:電子工業(yè)出版社, 2012:91113.

[3]馬駿.C#網(wǎng)絡(luò)應(yīng)用編程[M] 北京:人民郵電出版社, 2014:3848.

[4]卜春芬. C#后臺處理與多線程技術(shù)的應(yīng)用[J]. 昆明學(xué)院學(xué)報(bào), 2010(3):1218.

[5]周廣川.多線程應(yīng)用程序調(diào)試技術(shù)[J]. 現(xiàn)代計(jì)算機(jī):專業(yè)版, 2011(3):154156.

[6]孫小平.網(wǎng)絡(luò)系統(tǒng)安全漏洞掃描淺析[J] .網(wǎng)絡(luò)安全技術(shù)與應(yīng)用, 2016(2):7880.

責(zé)任編輯(責(zé)任編輯:杜能鋼)

猜你喜歡
語言
詩之新,以語言創(chuàng)造為基
中華詩詞(2023年8期)2023-02-06 08:51:28
(n,k)-語言及左-(n,k)-語言的一些性質(zhì)
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補(bǔ)正之道
累積動態(tài)分析下的同聲傳譯語言壓縮
日常語言與播音語言
新聞傳播(2016年10期)2016-09-26 12:15:04
語言技能退化與語言瀕危
我有我語言
論語言的“得體”
語文知識(2014年10期)2014-02-28 22:00:56
西藏| 斗六市| 灵山县| 渝北区| 陕西省| 华宁县| 定边县| 南城县| 太保市| 罗源县| 镇雄县| 大城县| 石渠县| 基隆市| 新平| 游戏| 寿阳县| 奉新县| 广安市| 昌宁县| 儋州市| 普安县| 陆丰市| 普定县| 临夏县| 四会市| 江源县| 滦南县| 平乐县| 唐山市| 平南县| 永济市| 安乡县| 扎兰屯市| 星座| 广河县| 桐庐县| 三原县| 佛坪县| 长宁县| 武隆县|