Tải bản đầy đủ (.pdf) (24 trang)

Báo Cáo Cuối Kì Lập trình mạng căn bản Đề tài Proxy Sever

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (844.12 KB, 24 trang )












Báo Cáo Cuối Kì


Lập trình mạng căn bản


Đề tài: Proxy Sever

Giảng viên hướng dẫn: TS: Trần Bá Nhiệm
Thực hiện: Phạm Đình Thanh Quang – 09520229
Trần Đình Quý - 09520239

Trường Đại học Công Nghệ Thông Tin
Đại học Quốc gia Tp. Hồ Chính Minh

Năm học: 2011 - 2012
Trường Đại học Công Nghệ Thông Tin
Đại học Quốc gia Tp. Hồ Chí Minh







Báo cáo cuối kì
Môn: Lập trình mạng căn bản



Đề tài: Proxy Sever
Giảng viên hướng dẫn: TS: Trần Bá Nhiệm
Thực hiện: Phạm Đình Thanh Quang – 09520239
Trần Đình Quý – 09520239


Năm học: 2011 - 2012

Mục Lục:

Mục Lục: 3
Lời Cảm Ơn: 5
Cơ Sở Lý Thuyết: 6
1. Proxy Sever là gì? 6
2. Chức năng của proxy 6
3. Ý nghĩa của proxy 7
4. Cách sử dụng proxy hiệu quả 7
5. Khuyết điểm 8
Nội dung chương trình: 9
1. Ý Tưởng Chương Trình 9
2. Giao Diện Chương Trình 9

3. Xây Dựng Chương Trình 12
3.1. Class Cache 12
3.2. Class Server 13
3.3. Class frmMain (Class Chương Trình) 18
Hướng Dẫn Sử Dụng 21
Tài Liệu Tham Khảo 24









Lời Cảm Ơn:

Chúng em xin gửi lời cảm ơn chân thành tới tập thể các thầy cô trường đại học Công
Nghệ Thông Tin – Đại học Quốc Gia Tp. Hồ Chí Minh, đặc biệt là thầy Trần Bá Nhiệm,
người đã dẫn dắt, chỉ dạy cho chúng em tất cả nội dung của bộ môn này trong suốt học kì
qua. Đồng thời cũng xin cảm ơn tất cả các bạn sinh viên, các thành viên trên các diễn đàn
của trường cũng như của Microsoft đã góp sức giúp nhóm mình hoàn thành bài báo cáo
này. Xin chân thành cám ơn!

Cơ Sở Lý Thuyết:
1. Proxy Sever là gì?
Proxy là một Internet server làm nhiệm vụ chuyển tiếp thông tin và kiểm soát tạo sự an
toàn cho việc truy cập Internet của các máy khách, còn gọi là khách hàng sử dụng dịch vụ
internet. Trạm cài đặt proxy gọi là proxy server. Proxy hay trạm cài đặt proxy có địa chỉ
IP và một cổng truy cập cố định. Ví dụ: 123.234.111.222:80. Địa chỉ IP của proxy trong

ví dụ là 123.234.111.222 và cổng truy cập là 80.
2. Chức năng của proxy
Một số hãng và công ty sử dụng proxy với mục đích: Giúp nhiều máy tính truy cập
Internet thông qua một máy tính với tài khoản truy cập nhất định, máy tính này được gọi
là Proxy server. Chỉ duy nhất máy Proxy này cần modem và account truy cập internet,
các máy client (các máy trực thuộc) muốn truy cập internet qua máy này chỉ cần nối
mạng LAN tới máy Proxy và truy cập địa chỉ yêu cầu. Những yêu cầu của người sử dụng
sẽ qua trung gian proxy server thay thế cho server thật sự mà người sử dụng cần giao
tiếp, tại điểm trung gian này công ty kiểm soát được mọi giao tiếp từ trong công ty ra
ngoài internet và từ internet vào máy của công ty. Sử dụng Proxy, công ty có thể cấm
nhân viên truy cập những địa chỉ web không cho phép, cải thiện tốc độ truy cập nhờ sự
lưu trữ cục bộ các trang web trong bộ nhớ của proxy server và giấu định danh địa chỉ của
mạng nội bộ gây khó khăn cho việc thâm nhập từ bên ngoài vào các máy của công ty.
Đối với các nhà cung cấp dịch vụ đường truyền internet: Do internet có nhiều lượng
thông tin mà theo quan điểm của từng quốc gia, từng chủng tộc hay địa phương mà các
nhà cung cấp dịch vụ internet khu vực đó sẽ phối hợp sử dụng proxy với kỹ thuật tường
lửa để tạo ra một bộ lọc gọi là firewall proxy nhằm ngăn chặn các thông tin độc hại hoặc
trái thuần phong mỹ tục đối với quốc gia, chủng tộc hay địa phương đó. Địa chỉ các
website mà khách hàng yêu cầu truy cập sẽ được lọc tại bộ lọc này, nếu địa chỉ không bị
cấm thì yêu cầu của khách hàng tiếp tục được gửi đi, tới các DNS server của các nhà
cung cấp dịch vụ. Firewall proxy sẽ lọc tất cả các thông tin từ internet gửi vào máy của
khách hàng và ngược lại.



3. Ý nghĩa của proxy
Proxy không chỉ có giá trị bởi nó làm được nhiệm vụ của một bộ lọc thông tin, nó còn tạo
ra được sự an toàn cho các khách hàng của nó, firewal Proxy ngăn chặn hiệu quả sự xâm
nhập của các đối tượng không mong muốn vào máy của khách hàng. Proxy lưu trữ được
các thông tin mà khách hàng cần trong bộ nhớ, do đó làm giảm thời gian truy tìm làm cho

việc sử dụng băng thông hiệu quả.
Proxy server giống như một vệ sĩ bảo vệ khỏi những rắc rối trên Internet. Một Proxy
server thường nằm bên trong tường lửa, giữa trình duyệt web và server thật, làm chức
năng tạm giữ những yêu cầu Internet của các máy khách để chúng không giao tiếp trực
tiếp Internet. Người dùng sẽ không truy cập được những trang web không cho phép (bị
cấm).
Mọi yêu cầu của máy khách phải qua Proxy server, nếu địa chỉ IP có trên proxy, nghĩa là
website này được lưu trữ cục bộ, trang này sẽ được truy cập mà không cần phải kết nối
Internet, nếu không có trên Proxy server và trang này không bị cấm, yêu cầu sẽ được
chuyển đến server thật, DNS server và ra Internet. Proxy server lưu trữ cục bộ các trang
web thường truy cập nhất trong bộ đệm để giảm chi phí kết nối, giúp tốc độ duyệt web
nhanh hơn.
Proxy server bảo vệ mạng nội bộ khỏi bị xác định bởi bên ngoài bằng cách mang lại cho
mạng hai định danh: một cho nội bộ, một cho bên ngoài. Điều này tạo ra một “bí danh”
đối với thế giới bên ngoài và gây khó khăn đối với nếu người dùng “tự tung tự tác” hay
các hacker muốn xâm nhập trực tiếp máy tính nào đó.
4. Cách sử dụng proxy hiệu quả
Do các proxy có quy mô bộ nhớ khác nhau và số lượng người đang sử dụng proxy nhiều-
ít khác nhau, Proxy server hoạt động quá tải thì tốc độ truy cập internet của khách hàng
có thể bị chậm. Mặt khác một số website khách hàng có đầy đủ điều kiện nhân thân để
đọc, nghiên cứu nhưng bị tường lửa chặn không truy cập được thì biện pháp đổi proxy để
truy cập là điều cần thiết nhằm đảm bảo công việc. Do đó người sử dụng có thể chọn
proxy server để sử dụng cho riêng mình. Có các cách chọn lựa cho người sử dụng. Sử
dụng proxy mặc định của nhà cung cấp dịch vụ (internet), trường hợp này người sử dụng
không cần điền địa chỉ IP của proxy vào cửa sổ internet option của trình duyệt trong máy
của mình. Sử dụng proxy server khác (phải trả phí hoặc miễn phí) thì phải điền địa chỉ IP
của proxy server vào cửa sổ internet option của trình duyệt.
Proxy Sever còn làm cho việc sử dụng băng thông hiệu quả hơn. Với băng thông hạn chế
mà yêu cầu truy cập Internet lại rất cao, thì Proxy Sever là cách có lợi. Giả sử, một cơ
quan có hai kết nối: kết nối 56K bit/s với Internet và kết nối Ethernet cục bộ với 50 PC.

Nếu không có Proxy Sever, mỗi yêu cầu và phản hồi Internet đều truyền trên đường 56K,
như vậy có thể xảy ra tình trạng tắt nghẽn nếu có nhiều người dùng truy cập đồng thời
Internet. Proxy Sever cho phép người dùng truy cập Internet một cách cục bộ qua kết nối
Ethernet, nhờ vậy nhiều yêu cầu cho cùng trang Web sẽ không tràn ngập đường kết nối
56K.
5. Khuyết điểm
Tuy nhiên, không phải lúc nào Proxy Sever cũng hữu ích, ví dụ như khi gặp phải loại
thông tin không cho phép lưu lại trên bộ đệm kiểu như CGI. Mặt khác, tốc độ cũng sẽ bị
ảnh hưởng vì Proxy Sever kiểm tra từng yêu cầu trước khi phản hồi.

Nội dung chương trình:
1. Ý Tưởng Chương Trình

Chương trình được xây dựng với mục tiêu: Giao diện đẹp mắt và độ thẫm mĩ cao,
cách trình bày các công cụ trực quan và khoa học hướng tới mục tiêu đơn giản hoá khi
người dùng lần đầu sử dụng chương trình. Đồng thời, chương trình cũng hỗ trợ tương tác
với trình duyệt được sử dụng rộng rãi nhất hiện nay: Internet Explorer (Hỗ trợ sẵn một
Web Browser trong chương trình đồng thời có chức năng thay đổi thông số Proxy cho
Internet Explorer cũng như các trình duyệt sử dụng Proxy chung với Internet Explorer
như Chrome, Opera,…). Riêng đối với Mozzila FireFox hay các trình duyệt chạy trên nền
Netscape thì phải tự thay đổi bằng tay.
2. Giao Diện Chương Trình

Giao diện chính:

Giao diện công cụ Banned Site (Không cho người dùng vào các trang đã bị chặn)

Kiểm tra proxy khi chạy một số website nổi tiếng:



Các website không được phép truy cập:

3. Xây Dựng Chương Trình

Chương trình được xây dựng từ lớp cơ bản:
- Class frmMain: Class xử lí các sự kiện cho các công cụ trên Windows Form khi
được gọi.
- Class Server: Tạo proxy server và xử lí các yêu cầu đến từ các máy khách (Client).
- Class Cache: Lưu lại cache của các liên kết sử dụng giao thức là GET.
3.1. Class Cache
Như đã nói ở trên, nếu trang web được gọi sử dụng giao thức là GET thì có thể
được lưu cache lại nhằm tối ưu hoá tốc độ lướt web của người sử dụng.
- Hàm Boolean CanCache(WebHeaderCollection headers, ref DateTime? expires): Có hai
tham số truyền vào là WebHeaderCollection và expires. Class
System.Net.WebHeaderCollection là một class dùng để chứa HTTP Header do kết quả
từ máy chủ của website gửi về khi có yêu cầu từ Proxy Server. Từ Header ta có
thể biết được, website này có cho phép lưu trữ Cache hay không thông qua thuộc
tính Cache-Control, Pragma, Expires. Trong Cache-Control có chứa các thuộc
tính con là max-age, private, no-cache, no-store, public Max-age chính là thông
số thời gian tối đa cache được phép lưu trữ trên máy tính. Nếu max-age bằng 0 thì
có nghĩa là website đó không cho phép Proxy lưu trữ cache. Còn nếu trong Cache-
Control có chứa các thuộc tính private, no-cache thì Proxy cũng không được phép
lưu trữ cache. Ngược lại, nếu Cache-Control có chứa thuộc tính no-store, public
thì cache sẽ được phép lưu lại trên máy. Ngoài ra, Cache cũng sẽ không được sử
dụng nếu trong thuộc tính Pragma có chứa từ khoá no-cache. Thuộc tính Expires
chứa thông tin thời gian cache được phép tồn tại trên máy.
- Hàm CacheEntry MakeEntry(HttpWebRequest request, HttpWebResponse response,
List<Tuple<String, String>> headers, DateTime? expires) trả về một đối tượng
CacheEntry chứa các thông về về cache sẽ được lưu trữ như AbsoluteUri, UserAgent,
DateStored, ResponseBytes, Headers…

- Hàm CacheEntry GetData(HttpWebRequest request) trả về đối tượng CacheEntry đã
được lưu trong bộ nhớ Cache của Proxy. Nếu một yêu cầu từ phía máy khách
(Client) đã được thực hiện trước đó bởi Proxy thì Proxy sẽ thực hiện lấy thông tin
từ Cache chứ không gửi yêu cầu đến máy chủ của website nữa.

3.2. Class Server
Class Server là class chính của chương trình, chứa các hàm khởi tạo Proxy cũng
như dừng proxy, tiếp nhận yêu cầu từ máy khách và gửi lên máy chủ và nhận kết
quả chuyển về cho máy khách.
- Hàm khởi tạo Server(IPAddress IP, int Port): Khởi tạo biến TcpListener Listener
để tiếp nhận và xử lí các yêu cầu gửi lên từ client.
- Hàm void Start(): Chạy hàm Listener.Start(), bắt đầu chạy nền thread
Listener_Thread. Thread này sẽ chạy nền hàm Listen() có tác dụng xử lí các yêu
cầu đến từ client.
- Hàm void Stop(): Ngưng tiếp nhận các yêu cầu đến từ client cũng như dừng tất cả
các việc đang thực hiện.
- Hàm Listen(): Hàm này sử dụng một vòng lặp vô hạn để tiếp nhận yêu cầu đến từ
client. Khi có một client yêu cầu kết nối, một đối tượng TcpClient client sẽ được
tạo ra để quản lí và xử lí các yêu cầu đến từ client này. Các yêu cầu đến từ client
này sẽ được đưa vào một ThreadPool và sẽ được xử lí ngay khi ThreadPool trong
trạng thái sẵn sàng (Đã xử lí hết các công việc trước đó).
- Hàm void ProcessClient(Object obj) tham số truyền vào là một Object có thể ép
kiểu thành TcpClient. Hàm này sẽ gọi hàm HTTPProcess() với tham số truyền vào
chính là obj đã được ép kiểu thành client. Sau khi xử lí xong công việc thì client
này sẽ được đóng lại để tiết kiệm tài nguyên.
- Hàm List<String> BannedList() trả về một biến kiểu List<String> chứa danh sách
các trang web không được phép tải về. Các trang này được lưu trong file XML có
tên là Banned.XML

- Hàm void HTTPProcess(TcpClient client) là hàm chính của chương trình này. Hàm

này sẽ được thực hiện các lệnh sau:

o Dùng biến clientStream kiểu Stream để lấy yêu cầu từ client.
o Đọc yêu cầu từ client bằng biến StreamReader clientStreamReader.
o Đọc dòng đầu tiên của clientStreamReader để có các thông tin: Giao thức
sử dụng, đường dẫn tuyệt đối và phiên bản HTTP đang sử dụng và đưa kết
quả vào biến String httpCmd. Sau đó đóng clientStream và
clientStreamReader lại.
o Khởi tạo các đối tượng HttpWebRequest webReq và HttpWebResponse response
để gửi yêu cầu và nhận kết quả từ Server. Kiểm tra xem đường dẫn gửi từ
client có nằm trong danh sách cấm hyay không? Nếu không thì xử lí tiếp,
nếu có thì trả về null.
o Truyền đường dẫn URI, giao thức sử dụng và phiên bản HTTP vào biến
webReq.
o Đọc yêu cầu gửi lên từ client và chuyển yêu cầu đó thành yêu cầu của
Proxy đến Server.
o Kiểm tra xem giao thức sử dụng là gì, nếu giao thức sử dụng là GET thì
kiểm tra xem Cache có hữu dụng không? Nếu không thì tải trang từ đầu.
Nếu có thì đưa Cache vào một biết CacheEntry là cacheEntry.
o Kiểm tra xem cacheEntry đã có dữ liệu chưa, nếu chưa thì nghĩa là cache
không chứa dữ liệu được yêu cầu, phải tải toàn bộ từ server. Ta dùng một
biến List<Tuple<String, String>> responseHeaders để chứa HTTP Header
phản hồi từ server bằng cách dùng hàm ProcessResponse(response) sẽ được
trình bày bên dưới. Sử dụng các class đã được cung cấp sẵn là
StreamWriter và Stream để trả về kết quả nhận được từ server cho client.
Nếu cacheEntry đã có dữ liệu thì trả về cache đã được lưu mà không cần
phải tải lại
o Đóng các class Reader và Writer lại và kết thúc hàm.
Code:
/// <summary>

/// Process HTTP Header to get the web response
/// </summary>
/// <param name="client"></param>
private static void HTTPProcess(TcpClient client)
{
Stream clientStream = client.GetStream();
Stream outStream = clientStream;
StreamReader clientStreamReader = new StreamReader(clientStream);
CacheEntry cacheEntry = null;
MemoryStream cacheStream = null;
List<String> BannedSites = BannedList();

try
{
//read the first line HTTP command
String httpCmd = clientStreamReader.ReadLine();
if (String.IsNullOrEmpty(httpCmd))
{
clientStreamReader.Close();
clientStream.Close();
return;
}
//break up the line into three components
String[] splitBuffer = httpCmd.Split(spaceSplit, 3);

String method = splitBuffer[0];
String remoteUri = splitBuffer[1];
Version version = new Version(1, 0);

HttpWebRequest webReq;

HttpWebResponse response = null;


//construct the web request that we are going to issue on behalf of the
client.
for (int i = 0; i < BannedSites.Count(); i++)
{
if (remoteUri.IndexOf(BannedSites[i]) > 0)
{
return;
}
}
webReq = (HttpWebRequest)HttpWebRequest.Create(remoteUri);
webReq.Method = method;
webReq.ProtocolVersion = version;

//read the request headers from the client and copy them to our request
int contentLen = ReadRequestHeaders(clientStreamReader, webReq);
webReq.Proxy = null;
webReq.KeepAlive = false;
webReq.AllowAutoRedirect = false;
webReq.AutomaticDecompression = DecompressionMethods.None;


// Using Completed Request From Cache
if (method.ToUpper() == "GET")
cacheEntry = ProxyCache.GetData(webReq);
else if (method.ToUpper() == "POST")
{
char[] postBuffer = new char[contentLen];

int bytesRead;
int totalBytesRead = 0;
StreamWriter sw = new StreamWriter(webReq.GetRequestStream());
while (totalBytesRead < contentLen && (bytesRead =
clientStreamReader.ReadBlock(postBuffer, 0, contentLen)) > 0)
{
totalBytesRead += bytesRead;
sw.Write(postBuffer, 0, bytesRead);
}

sw.Close();
}

if (cacheEntry == null)
{
webReq.Timeout = 15000;

try
{
response = (HttpWebResponse)webReq.GetResponse();
}
catch (WebException webEx)
{
response = webEx.Response as HttpWebResponse;
}
if (response != null)
{
List<Tuple<String, String>> responseHeaders =
ProcessResponse(response);
StreamWriter myResponseWriter = new StreamWriter(outStream);

Stream responseStream = response.GetResponseStream();
try
{
// Send the response status and response headers
WriteResponseStatus(response.StatusCode,
response.StatusDescription, myResponseWriter);
WriteResponseHeaders(myResponseWriter, responseHeaders);

DateTime? expires = null;
CacheEntry entry = null;
Boolean canCache = (ProxyCache.CanCache(response.Headers, ref
expires));
if (canCache)
{
entry = ProxyCache.MakeEntry(webReq, response,
responseHeaders, expires);
if (response.ContentLength > 0)
cacheStream = new MemoryStream(entry.ResponseBytes);
}

Byte[] buffer;
if (response.ContentLength > 0)
buffer = new Byte[response.ContentLength];
else
buffer = new Byte[BufferSize];

int bytesRead;

while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length))
> 0)

{
if (cacheStream != null)
cacheStream.Write(buffer, 0, bytesRead);
outStream.Write(buffer, 0, bytesRead);
}

responseStream.Close();
if (cacheStream != null)
{
cacheStream.Flush();
cacheStream.Close();
}

outStream.Flush();
if (canCache)
ProxyCache.AddData(entry);
}
catch
{
}
finally
{
responseStream.Close();
response.Close();
myResponseWriter.Close();
}
}
}
else
{

StreamWriter myResponseWriter = new StreamWriter(outStream);
try
{
WriteResponseStatus(cacheEntry.StatusCode,
cacheEntry.StatusDescription, myResponseWriter);
WriteResponseHeaders(myResponseWriter, cacheEntry.Headers);
if (cacheEntry.ResponseBytes != null)
{
outStream.Write(cacheEntry.ResponseBytes, 0,
cacheEntry.ResponseBytes.Length);
}
myResponseWriter.Close();
}
catch
{
}
finally
{
myResponseWriter.Close();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
clientStreamReader.Close();
clientStream.Close();

outStream.Close();
if (cacheStream != null)
cacheStream.Close();
}

}
-
- Hàm List<Tuple<String, String>> ProcessResponse(HttpWebResponse response) : Như
đã nói ở trên, hàm này dùng để lấy HTTP Header trả về từ server. Thêm thông tin
của chương trình vào Header.
3.3. Class frmMain (Class Chương Trình)

Class này có nhiệm vụ chủ yếu là tương tác với người sử dụng, khởi tạo và gọi các
hàm trong class Server để bắt đầu và dừng server. Đồng thời, class frmMain còn được
sử dụng để thay đổi thông tin của Proxy trong Registry của Windows, hỗ trợ người
dùng tương tác với trình duyệt tích hợp sẵn trong chương trình cũng như các trình
duyệt nền IE. Một số hàm tiêu biểu trong class này:
- Hàm buttonItem1_Click(object sender, EventArgs e) dùng để bắt đầu hoặc dừng
Proxy.
/// <summary>
/// Start or Stop Proxy Server
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonItem1_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(cmbIP.Text) || String.IsNullOrEmpty(txtPort.Text))
{
MessageBox.Show("Please Input All Need Data. Host IP or Port Is Missing!");
return;

}
HTTPServer = new Server(IPAddress.Parse(cmbIP.Text), Int32.Parse(txtPort.Text));
if (btnStart.Text == "Start Server")
{
btnStart.Text = "Stop Server";
HTTPServer.Start();
chkUseProxy.Enabled = true;
lblStatus.Text = "Proxy Server Started At: " + cmbIP.Text + ":" + txtPort.Text;
cmbIP.Enabled = false;
txtPort.Enabled = false;
}
else
{
btnStart.Text = "Start Server";
HTTPServer.Stop();
chkUseProxy.Enabled = false;
lblStatus.Text = "Proxy Server Stopped!";
cmbIP.Enabled = true;
txtPort.Enabled = true;
}
}

- Hàm khởi tạo và thêm thông tin cho các công cụ trên Form
/// <summary>
/// Constructor Function
/// </summary>
public frmMain()
{
InitializeComponent();
List<IPAddress> IP = new List<IPAddress>();

IP = ListLocalIP();
foreach (var item in IP)
{
cmbIP.Items.Add(item.ToString());
}
cmbIP.SelectedIndex = 0;
chkUseProxy.Enabled = false;

// Get the proxy setting from Internet Options
RegistryKey registry =
Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Interne
t Settings", false);
try
{
int Enable = Convert.ToInt32(registry.GetValue("ProxyEnable"));
string Server = registry.GetValue("ProxyServer").ToString();
if (Enable == 1 && Server != null)
chkUseProxy.Checked = true;
else chkUseProxy.Checked = false;
}
catch (NullReferenceException ex)
{
chkUseProxy.Checked = false;
}
}
- Hàm chkUseProxy_Click(object sender, EventArgs e) để gán hoặc xoá thông tin về
Proxy trong Registry đồng thời refresh lại để thông tin có tác dụng.
private void chkUseProxy_Click(object sender, EventArgs e)
{
RegistryKey registry =

Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Interne
t Settings", true);
if (chkUseProxy.Checked == true)
{
registry.SetValue("ProxyEnable", 1);
registry.SetValue("ProxyServer", cmbIP.Text + ":" + txtPort.Text);
}
else
{
registry.SetValue("ProxyEnable", 0);
registry.SetValue("ProxyServer", "");
}
settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED,
IntPtr.Zero, 0);
refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH,
IntPtr.Zero, 0);
}


Hướng Dẫn Sử Dụng

Giao diện chương trình được xây dựng trực quan, dễ dàng thao tác ngay cả với
những người mới sử dụng lần đầu.
Để bắt đầu một proxy, ta chỉ cần chọn địa chỉ IP của host từ combobox và gõ số
cổng đặc biệt của Proxy, sau đó nhấn Start Server để bắt đầu Proxy.


Lưu ý: Để sử dụng proxy trên trình duyệt tích hợp, cần phải check vào ô Use
Proxy Sever. Thông tin proxy này sẽ được lưu vào Registry và cũng sẽ ảnh hưởng đến
các trình duyệt sử dụng thông tin chung của Windows như Opera, Chrome, Internet

Explorer…


Khi muốn chặn 1 trang web nào đó, ta chỉ việc chọn Banned Websites, nhấn nút
Add, gõ tên site và tên miền của website đó vào.





Và website đã bị chặn:

Tài Liệu Tham Khảo
- Các slide và source code của thầy Trần Bá Nhiệm
- Các thông tin trên MSDN của Microsoft.
- Các bài thảo luận trên StackOverFlow, CodeProject, Codeplex,…
- Một số ebook Professional C# 4.0 and .NET 4, …

×