MikroTik RouterOS 的 NAT 用戶 都透過 異地 Web Proxy 上網

Proxy就是在網路上的某一部主機,提供一定容量的硬碟空間,供眾多的網路使用者作為cache之用。

如果你設定了Proxy Server,那麼你在向網路上的其他主機擷取資源時(包括WWW、FTP以及GOPHER),都會透過這部主機。

也就是說,你不論要連往哪裡,其實都是只連結到這部主機,再由它向真正載有資訊的主機提出資料擷取的要求。

Proxy收到你的要求之後,會先檢查自己的硬碟上有沒有你要的資料。

如果有,他會跟真正的主機核對檔案的大小跟日期,如果檔案並沒有更新的話,就直接把硬碟裡的資料吐給你。

如果比對日期跟檔案大小發現檔案已有更動的話,或者是搜尋硬碟後發現你要的資料它根本沒有的話,就會向遠端主機擷取你要的資料,存到Proxy自己的硬碟裡,然後再吐給你。

所以不論Proxy上面有沒有你的資料,Proxy都會負責把它找給你。

因此你的機器本身並沒有跟Proxy以外的主機做溝通。  

使用 Winbox 登入 Router OS ,選擇選項 IP > Web Proxy:


  2012-08-24      ez      Mikrotik RouterOS
.Net 利用 WebBrowser 製作 網頁截圖 功能

.Net 可以輕鬆利用 WebBrowser 製作網頁截圖功能!

程式碼如下:

private void Main_Load(object sender, EventArgs e)
{
	WebBrowser wb = new WebBrowser();
	this.Controls.Add(wb);

	wb.Url = new Uri("http://www.google.com.tw/"); //要截取的網址
	while (wb.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents(); //偵測網頁是否載入完畢

	//如果寬度小於1024,就以1024為寬度,高度自動偵測
	wb.Width = 1024;
	Application.DoEvents();
	wb.Width = wb.Document.Body.ScrollRectangle.Width;
	if (wb.Width < 1024) wb.Width = 1024;
	Application.DoEvents();
	wb.Height = wb.Document.Body.ScrollRectangle.Height;
	Application.DoEvents();

	//截圖儲存為圖片
	using (Bitmap bmp = new Bitmap(wb.Width, wb.Height))
	{
		wb.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
		EncoderParameters myEncoderParameters = new EncoderParameters(1);
		myEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, 100);
		bmp.Save("儲存檔案路徑", GetEncoder(System.Drawing.Imaging.ImageFormat.Jpeg), myEncoderParameters);
	}
}

/// <summary>
/// IMG編碼產生
/// </summary>
/// <param name="format"></param>
/// <returns></returns>
private ImageCodecInfo GetEncoder(ImageFormat format)
{
	ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
	foreach (ImageCodecInfo codec in codecs)
	{
		if (codec.FormatID == format.Guid) return codec;
	}
	return null;
}

  2012-06-20      ez      .NET
ASP Base64 轉換

程式碼如下:

只需利用 base64_encode 進行加密,base64_decode 進行解密。

<%

' Functions to provide encoding/decoding of strings with Base64.
' 
' Encoding: myEncodedString = base64_encode( inputString )
' Decoding: myDecodedString = base64_decode( encodedInputString )
'
' Programmed by Markus Hartsmar for ShameDesigns in 2002. 
' Email me at: [email protected]
' Visit our website at: http://www.shamedesigns.com/
'

	Dim Base64Chars
	Base64Chars =	"ABCDEFGHIJKLMNOPQRSTUVWXYZ" & _
			"abcdefghijklmnopqrstuvwxyz" & _
			"0123456789" & _
			"+/"

	' Functions for encoding string to Base64
	Public Function base64_encode( byVal strIn )
		Dim c1, c2, c3, w1, w2, w3, w4, n, strOut
		For n = 1 To Len( strIn ) Step 3
			c1 = Asc( Mid( strIn, n, 1 ) )
			c2 = Asc( Mid( strIn, n + 1, 1 ) + Chr(0) )
			c3 = Asc( Mid( strIn, n + 2, 1 ) + Chr(0) )
			w1 = Int( c1 / 4 ) : w2 = ( c1 And 3 ) * 16 + Int( c2 / 16 )
			If Len( strIn ) >= n + 1 Then 
				w3 = ( c2 And 15 ) * 4 + Int( c3 / 64 ) 
			Else 
				w3 = -1
			End If
			If Len( strIn ) >= n + 2 Then 
				w4 = c3 And 63 
			Else 
				w4 = -1
			End If
			strOut = strOut + mimeencode( w1 ) + mimeencode( w2 ) + _
					  mimeencode( w3 ) + mimeencode( w4 )
		Next
		base64_encode = strOut
	End Function

	Private Function mimeencode( byVal intIn )
		If intIn >= 0 Then 
			mimeencode = Mid( Base64Chars, intIn + 1, 1 ) 
		Else 
			mimeencode = ""
		End If
	End Function	

	' Function to decode string from Base64
	Public Function base64_decode( byVal strIn )
		Dim w1, w2, w3, w4, n, strOut
		For n = 1 To Len( strIn ) Step 4
			w1 = mimedecode( Mid( strIn, n, 1 ) )
			w2 = mimedecode( Mid( strIn, n + 1, 1 ) )
			w3 = mimedecode( Mid( strIn, n + 2, 1 ) )
			w4 = mimedecode( Mid( strIn, n + 3, 1 ) )
			If w2 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w1 * 4 + Int( w2 / 16 ) ) And 255 ) )
			If w3 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w2 * 16 + Int( w3 / 4 ) ) And 255 ) )
			If w4 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w3 * 64 + w4 ) And 255 ) )
		Next
		base64_decode = strOut
	End Function

	Private Function mimedecode( byVal strIn )
		If Len( strIn ) = 0 Then 
			mimedecode = -1 : Exit Function
		Else
			mimedecode = InStr( Base64Chars, strIn ) - 1
		End If
	End Function

%>

<%
T = "cscworm"
Response.write "原始文字:" & T & "<br>"
T = base64_encode(T)
Response.write "加密文字:" & T & "<br>"
T = base64_decode(T)
Response.write "解密文字:" & T & "<br>"
%>

  2012-06-20      ez      ASP
ASP 程式碼 加密 及 解密 方法

辛苦寫好的程式不想被別人看到原始碼嗎?

可以利用以下方法進行加密,但是 =.= 也附上解密方式,所以只能防君子,不能防小人!

程式下載:AspCrypt

使用 UI 介面加解密:

使用指令加解密:

加密指令: screnc.exe "需加密的檔案路徑" "加密後檔案儲存路徑"

解密指令: dec.exe "需解密的檔案路徑" "解密後檔案儲存路徑"


  2012-06-20      ez      ASP
.Net 利用 NGif 讀取 及 編輯 GIF 檔案

.Net 只需要利用 NGif 就可以輕鬆讀取及編輯GIF檔案。

官方網站下載:http://www.codeproject.com/Articles/11505/NGif-Animated-GIF-Encoder-for-NET

本地下載:NGif 

將 GIF 圖檔,每個影格取出來,並且儲存,範例程式如下:

using Gif.Components;

GifDecoder gd = new GifDecoder();
gd.Read("檔案路徑");
for (int i = 0; i < gd.GetFrameCount(); i++)
{
    Image image = gd.GetFrame(i);
    image.Save("儲存路徑");
}

  2012-06-20      ez      .NET