一個全新的產品,讓人期待,也讓人受傷。由Visual Studio 2008改使用Visual Studio 2010已已經一段時間,整體而言,使用Visual Studio 2010開發是開心的,但近來常常寫Code寫到一半,Visual Studio 2010就會發現Crash,只是簡單打幾行程式就會Crash,然後自動重新啟動,這樣的感覺很不好,重點是剛才所打的Code有時還會不見了。
只能等Service Pack 1出來時,可否大大改進穩定度問題。想念Visual Studio 2008,用了許久也沒有Crash過!
我的物件導向學習史
我最早接觸的是Dos裡的Basic,在那個時代是個有個「黑白畫面」就讓人興奮的事了,一開始學程式都是叫你寫九九乘法表、排出各種圖型的星星(*)…等,到後來Windows 95與OS/2大戰,第一次接觸到Visual Basic 6…好多有趣的歷史,但今天我想聊聊一些程式方面的東西。
1. Copy & Paste
在我剛學程式時,最常使用的方法,就是將會重覆使用的程式片斷,Copy然後Paste,最是簡單也是最有效率的方法,但時間一久,就會發現問題!如果這段程式需要修改,那你必須將有所有使用此段程式的檔案找出來,然後全部修改,當時我最常用的工具是UltraEdit,它在多檔案搜尋及取代實在好用,不過這實在不是個好方法。
2. 副程式
後來學到了副程式,我們將上述程式獨立出來,使用Sub或Function來撰寫,然後整個在一個檔案裡,需要的程式在引用使用即可,當程式需要修改時,我們也只需要修改此檔案裡的Sub或Function即可,引用使用的程式都不必修改,馬上套用修改後的Sub或Function,終於有比較像樣的架構出現。
3. 模組
後來我們發現,這個副程式檔案裡有些副程式實在好用,想要給其他開發系統也能使用,所以就有人開始將類似的副程式整理集合起來,分門別類,儲存在檔案裡,這就是模組(Module)的概念。在使用Visual Basic 6時代,網路上開始出現很多免費的模組,也有很多公司在賣模組,也就是我自可以買現成人家寫好的模組在Visual Basic 6來使用,來加速程式的開發。
4. 類別
模組真的是一大突破,在Visual Basic 6使用起來真的很高興,但模組還是有些問題,而且Visual Basic 6一直被罵,說Visual Basic 6根本不是物件導向的程式設計語言。什麼是物件導向?記得第一次上物件導向的課,是使用C++,聽的一個頭兩個大,而且就算你想要學物件導向,世面上清一色都是C及Java的教材,Visual Basic…根本沒有。到了多年之後,VB進步到VB.NET,在VB.NET中才終於引進了「OOP」的關念。在VB.NET我才開始關接觸到OOP。
看一看,我的學習史與程式進步史兩者還差得不遠,不過現在可以說是軟體爆炸的時代,推陳出新的速度快的不行,要好好加油才是。
參考:
Module與Class的差別??
1. Copy & Paste
在我剛學程式時,最常使用的方法,就是將會重覆使用的程式片斷,Copy然後Paste,最是簡單也是最有效率的方法,但時間一久,就會發現問題!如果這段程式需要修改,那你必須將有所有使用此段程式的檔案找出來,然後全部修改,當時我最常用的工具是UltraEdit,它在多檔案搜尋及取代實在好用,不過這實在不是個好方法。
2. 副程式
後來學到了副程式,我們將上述程式獨立出來,使用Sub或Function來撰寫,然後整個在一個檔案裡,需要的程式在引用使用即可,當程式需要修改時,我們也只需要修改此檔案裡的Sub或Function即可,引用使用的程式都不必修改,馬上套用修改後的Sub或Function,終於有比較像樣的架構出現。
3. 模組
後來我們發現,這個副程式檔案裡有些副程式實在好用,想要給其他開發系統也能使用,所以就有人開始將類似的副程式整理集合起來,分門別類,儲存在檔案裡,這就是模組(Module)的概念。在使用Visual Basic 6時代,網路上開始出現很多免費的模組,也有很多公司在賣模組,也就是我自可以買現成人家寫好的模組在Visual Basic 6來使用,來加速程式的開發。
4. 類別
模組真的是一大突破,在Visual Basic 6使用起來真的很高興,但模組還是有些問題,而且Visual Basic 6一直被罵,說Visual Basic 6根本不是物件導向的程式設計語言。什麼是物件導向?記得第一次上物件導向的課,是使用C++,聽的一個頭兩個大,而且就算你想要學物件導向,世面上清一色都是C及Java的教材,Visual Basic…根本沒有。到了多年之後,VB進步到VB.NET,在VB.NET中才終於引進了「OOP」的關念。在VB.NET我才開始關接觸到OOP。
看一看,我的學習史與程式進步史兩者還差得不遠,不過現在可以說是軟體爆炸的時代,推陳出新的速度快的不行,要好好加油才是。
參考:
Module與Class的差別??
駭客級測試工具--hping
今天來為大家介紹一個駭客級的測試工具「hping」。
聽到「駭客」不知道各位有沒有很高興,其實在資訊領域很利害的電腦高手我們稱為「駭客, Hacker」,但這些高手中有些人走上歧途,把這些可能是高深也可能不是高深的技術,使用在不正當的用途上,我們稱之「怪客, Cracker」。
就像正邪大戰一般,我們當然希望邪不能勝正,但在邪惡的一方發動攻擊之前,正義的一方是否能先做好充足的防禦,是重要的關鍵。那我要如何知道是否有良好的防禦工程呢?請東邪、西毒先來攻打一番嗎?當然不是!通常我們會先自我測試一番,如果連自我測試通無法通過,那還談什麼防禦,你說是不是。
如果你有一點網路基礎,那你一定使用過Windows系統下的ping指令,例如「開始 --> 執行 --> 鍵入:cmd --> 會跳出一個黑色命令視窗 --> 輸入:ping 168.95.1.1」這是一個在測試網路狀態的指令。或是當你電腦的網路不通時,是否有人就會說,你有沒有ping ping看?而Windows內建的ping真的是太陽春了,只合適簡單測試網路是否正常連線。
但我們需要的是一個能「模擬攻擊」的測試工具,而hping正是一個在Unix/Linux下的測試用的攻擊工具(也有Windows版本,我們下一部份會談),在開始介紹前,記得一件事,網路上的每一個工具,是毒也是藥,就如我介紹這個hping工具,你可以拿它來當駭客,也可以拿它來當怪客。
hping安裝
目前hping有hping2、hping3及hping.win32三個版本,Linux我們介紹hping3,hping.win32我們下一部份介紹。
# tar zxvf hping3-20051105.tar.gz
# cd hping3-20051105
# cat INSTALL (請詳細觀看)
# ./configure
# make
# make install
下面是一些常用的方法
hping www.abc.net.tw -1 -i u100000 -a 100.100.100.100
每秒送10個(-i u10000)ICMP(-1)封包到www.abc.net.tw 偽造來源IP(-a)為100.100.100.100
註:-1為數字非英文
hping www.abc.net.tw –i u1000000 –a 100.100.100.100 –s 22222 –p 44444
每秒送1個(-i u1000000)TCP(default)封包到www.abc.net.tw的port 44444,偽造來源IP(-a)100.100.100.100使用的port為22222
測試1: SYN Flooding(每秒10個封包)
hping 目標主機IP –i u100000 –S –a 偽造來源IP
測試2 :偽造IP的ICMP封包(每秒10個封包)
hping 目標主機IP –i u100000 –1 –a 偽造來源IP
註:-1為數字非英文
測試3:不正常TCP Flag組合封包(每秒10個封包)
(a)SYN+FIN
hping 目標主機IP –i u100000 –S –F –a 偽造來源IP
(b)X’mas
hping 目標主機IP –i u100000 –F –S –R –P –A –U –a 偽造來源IP
測試4:偽造IP的UDP封包
hping目標主機IP –i u100000 –2 –a 偽造來源IP
測試5:偽造IP內含CodeRed封包
hping 目標主機IP –i u100000 –d [封包datasize] –E [filename] –a [偽造來源IP]
如果參數使用方面有任何問題,請參考man hping或是線上hping man page。最後,希望「你」的系統可以平安通過「你」的測試。
聽到「駭客」不知道各位有沒有很高興,其實在資訊領域很利害的電腦高手我們稱為「駭客, Hacker」,但這些高手中有些人走上歧途,把這些可能是高深也可能不是高深的技術,使用在不正當的用途上,我們稱之「怪客, Cracker」。
就像正邪大戰一般,我們當然希望邪不能勝正,但在邪惡的一方發動攻擊之前,正義的一方是否能先做好充足的防禦,是重要的關鍵。那我要如何知道是否有良好的防禦工程呢?請東邪、西毒先來攻打一番嗎?當然不是!通常我們會先自我測試一番,如果連自我測試通無法通過,那還談什麼防禦,你說是不是。
如果你有一點網路基礎,那你一定使用過Windows系統下的ping指令,例如「開始 --> 執行 --> 鍵入:cmd --> 會跳出一個黑色命令視窗 --> 輸入:ping 168.95.1.1」這是一個在測試網路狀態的指令。或是當你電腦的網路不通時,是否有人就會說,你有沒有ping ping看?而Windows內建的ping真的是太陽春了,只合適簡單測試網路是否正常連線。
但我們需要的是一個能「模擬攻擊」的測試工具,而hping正是一個在Unix/Linux下的測試用的攻擊工具(也有Windows版本,我們下一部份會談),在開始介紹前,記得一件事,網路上的每一個工具,是毒也是藥,就如我介紹這個hping工具,你可以拿它來當駭客,也可以拿它來當怪客。
hping安裝
目前hping有hping2、hping3及hping.win32三個版本,Linux我們介紹hping3,hping.win32我們下一部份介紹。
- hping3下載:http://www.hping.org/hping3-20051105.tar.gz
- hping.win32下載:http://www.hping.org/hping2.win32.tar.gz
# tar zxvf hping3-20051105.tar.gz
# cd hping3-20051105
# cat INSTALL (請詳細觀看)
# ./configure
# make
# make install
下面是一些常用的方法
hping www.abc.net.tw -1 -i u100000 -a 100.100.100.100
每秒送10個(-i u10000)ICMP(-1)封包到www.abc.net.tw 偽造來源IP(-a)為100.100.100.100
註:-1為數字非英文
hping www.abc.net.tw –i u1000000 –a 100.100.100.100 –s 22222 –p 44444
每秒送1個(-i u1000000)TCP(default)封包到www.abc.net.tw的port 44444,偽造來源IP(-a)100.100.100.100使用的port為22222
測試1: SYN Flooding(每秒10個封包)
hping 目標主機IP –i u100000 –S –a 偽造來源IP
測試2 :偽造IP的ICMP封包(每秒10個封包)
hping 目標主機IP –i u100000 –1 –a 偽造來源IP
註:-1為數字非英文
測試3:不正常TCP Flag組合封包(每秒10個封包)
(a)SYN+FIN
hping 目標主機IP –i u100000 –S –F –a 偽造來源IP
(b)X’mas
hping 目標主機IP –i u100000 –F –S –R –P –A –U –a 偽造來源IP
測試4:偽造IP的UDP封包
hping目標主機IP –i u100000 –2 –a 偽造來源IP
測試5:偽造IP內含CodeRed封包
hping 目標主機IP –i u100000 –d [封包datasize] –E [filename] –a [偽造來源IP]
如果參數使用方面有任何問題,請參考man hping或是線上hping man page。最後,希望「你」的系統可以平安通過「你」的測試。
透過資料庫上傳下載檔案
在ASP時候,寫個上傳檔案都很麻煩,因為ASP本身沒有支援上傳的物件,必須使用第三方物件來進行上傳功能的實作,到了ASP.NET上傳實在很簡單,拉個FileUpload物件,寫簡單的幾行程式,馬上可以有上傳功能。
有了上傳,那下載呢?
下載就很笨,通常是網頁帶「Link」的方式,例如:「http://localhost/files/KKBruce.zip」這樣的方式來讓人下載。好一點的架個FTP,但還是寫個管理Link資料庫及程式,例如:「http://localhost/files/download.asp?id=1」取出「ftp://localhost/files/bruce/blog.zip」來讓使用者下載。久而久之,檔案一多還是不好管理,又要管檔案,又要管理Link!
所以想就使用「資料庫」來管理,這裡指的資料庫不是那種管理「路徑」的Table,而且將檔案整個存到Table裡,需要時再取出來使用,以下我們就來實作上傳檔案至資料庫,由資料庫取出檔案下載兩部份。
我們先建一個資料表,裡面最重要的是「Body」,Body就是要儲存檔案的地方,而一般網路資料或書籍資料都是使用「Image資料類型」,但查看MSDN後發現,如果你是使用SQL Server 2005以後的版本,請改使用請改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
以上是要注意的地方。
接下來我們來實作上傳檔案到資料庫,然後再從資料庫下載檔案。
新增Default.aspx在UI部份:
我們針對SaveFile及DownFile來撰寫程式碼:
SaveFile事件:
DownFile事件:
其實不難:
參考:
有了上傳,那下載呢?
下載就很笨,通常是網頁帶「Link」的方式,例如:「http://localhost/files/KKBruce.zip」這樣的方式來讓人下載。好一點的架個FTP,但還是寫個管理Link資料庫及程式,例如:「http://localhost/files/download.asp?id=1」取出「ftp://localhost/files/bruce/blog.zip」來讓使用者下載。久而久之,檔案一多還是不好管理,又要管檔案,又要管理Link!
所以想就使用「資料庫」來管理,這裡指的資料庫不是那種管理「路徑」的Table,而且將檔案整個存到Table裡,需要時再取出來使用,以下我們就來實作上傳檔案至資料庫,由資料庫取出檔案下載兩部份。
****** Object: Table [dbo].[Files] Script Date: 08/26/2010 17:12:17 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Files]( [uid] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [Body] [varbinary](max) NOT NULL, [Size] [decimal](18, 0) NOT NULL, [SaveDateTime] [datetime] NOT NULL, [LastUseDateTime] [datetime] NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
我們先建一個資料表,裡面最重要的是「Body」,Body就是要儲存檔案的地方,而一般網路資料或書籍資料都是使用「Image資料類型」,但查看MSDN後發現,如果你是使用SQL Server 2005以後的版本,請改使用請改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
在未來的 Microsoft SQL Server 版本中,將移除 ntext、text 和 image 等資料類型。請避免在新的開發工作中使用這些資料類型,並規劃修改目前在使用這些資料類型的應用程式。請改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
以上是要注意的地方。
接下來我們來實作上傳檔案到資料庫,然後再從資料庫下載檔案。
新增Default.aspx在UI部份:
<div> <asp:FileUpload ID="FU" runat="server" /> <asp:Button ID="SaveFile" runat="server" Text="上傳" /> <br /> <br /> 編號:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="DownFile" runat="server" Text="下載" /> </div>
我們針對SaveFile及DownFile來撰寫程式碼:
SaveFile事件:
Protected Sub SaveFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SaveFile.Click ' 先確認有選擇檔案 If Not FU.HasFile Then Response.Write("沒有上傳的檔案!") Response.End() End If ' 檔案存進資料庫都是「二進位」,所以使用Byte ' buf陣列依檔案大小來建立 ' 陣列由0開始,所以減1 Dim buf(Me.FU.PostedFile.ContentLength - 1) As Byte Me.FU.PostedFile.InputStream.Read(buf, 0, Me.FU.PostedFile.ContentLength) Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("SCS").ConnectionString) ' 將參考及欄位對應起來 Dim cmd As New SqlCommand("INSERT INTO Files(Name,Body,Size,SaveDateTime) VALUES (@filename,@body,@size, @sdt);", conn) cmd.Parameters.AddWithValue("@filename", FU.PostedFile.FileName) ' 將二進位檔放入資料庫中 cmd.Parameters.AddWithValue("@body", buf) cmd.Parameters.AddWithValue("@size", FU.PostedFile.ContentLength.ToString) cmd.Parameters.AddWithValue("@sdt", Now) Try Dim rs As Integer conn.Open() rs = cmd.ExecuteNonQuery Response.Write("新增成功") Catch ex As Exception Response.Write(ex) Finally cmd.Cancel() cmd.Dispose() conn.Close() End Try End Sub
DownFile事件:
Protected Sub DownFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DownFile.Click ' 由輸入 Dim id As Integer If String.IsNullOrEmpty(Me.TextBox1.Text) Then Response.Write("請輸入下載ID編號") Response.End() Else id = Me.TextBox1.Text End If Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("SCS").ConnectionString) Dim cmd As New SqlCommand("Select * from Files Where uid = @id", conn) cmd.Parameters.AddWithValue("@id", id) Dim dr As SqlDataReader Try conn.Open() dr = cmd.ExecuteReader ' 將資料取出,輸出 If dr.Read Then Response.ClearHeaders() Response.Clear() Response.Expires = 0 Response.Buffer = True ' Getxxx效能較佳 Dim Name As String = dr.GetString(1) ' 進行AddHeader設定 Response.AddHeader("Accept-Language", "zh-tw") ' 設定輸出檔案及類型 Response.AddHeader("content-disposition", "attachment; filename=" & Chr(34) & Name & Chr(34)) Response.ContentType = "Application/octet-stream" ' 進行「二進位」輸出,使用BinaryWrite方法 Response.BinaryWrite(dr("Body")) ' 將緩衝輸出 Response.Flush() Response.Close() ' 請參考討論,不要使用Response.End() ' http://www.blueshop.com.tw/board/FUM20041006161839LRJ/BRD20100824142739D3F.html 'Response.End() End If Response.End() Catch ex As Exception Response.Write(ex) Finally cmd.Cancel() cmd.Dispose() conn.Close() End Try End Sub
其實不難:
- 將檔案轉為Byte,然後存進資料庫的二進位欄位;
- 取出資料,進行二進位輸出。
參考:
Visual Studio 2010 新發現(7)--反白顯示
![]() |
反白顯示 |
另外我們還可以使用組合鍵:「Ctrl + Shift + 上或下鍵」來移至上一個或下一個反白顯示的物件。
訂閱:
文章 (Atom)