2009-05-29 15 views
7

Tôi đã đọc câu hỏi đó (How to create a simple proxy in C#?) gần như mong muốn của tôi.Làm cách nào để tạo trình theo dõi/chặn C# http đơn giản?

Tôi chỉ muốn phát triển một ứng dụng C#, ví dụ, theo dõi Firefox, IE, v.v ... và ghi lại tất cả các trang được điều hướng. Tùy thuộc vào trang được truy cập, tôi muốn chặn trang web (như bộ lọc của phụ huynh).

Đoạn mã/mẫu là tốt, nhưng nếu bạn chỉ có thể cho tôi biết một số hướng của các lớp đó để sử dụng, tôi sẽ biết ơn. :-)

Trả lời

17

tôi sẽ trả lời thích hợp cho cha mẹ: ala "Parental Controls"

Bạn có thể bắt đầu với một máy chủ proxy khi những đứa trẻ nhỏ hơn khoảng 10 tuổi. Sau đó, họ sẽ tìm ra cách để có được xung quanh proxy (hoặc chạy các ứng dụng khách hàng của riêng họ bỏ qua proxy). Trong những năm đầu tuổi teen, bạn có thể sử dụng ổ cắm thô. Nhập chương trình này vào Visual Studio (C#).

class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      byte[] input = BitConverter.GetBytes(1); 
      byte[] buffer = new byte[4096]; 
      Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 
      s.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.91"), 0)); 
      s.IOControl(IOControlCode.ReceiveAll, input, null); 

      int bytes = 0; 
      do 
      { 
       bytes = s.Receive(buffer); 
       if (bytes > 0) 
       { 
        Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytes)); 
       } 
      } while (bytes > 0); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex); 
     } 
    } 
} 

Lưu ý rằng đây chỉ là một “đoạn mã”, thiếu thiết kế và kiểm tra lỗi phù hợp. [Vui lòng không sử dụng 'as-is' - bạn đã yêu cầu chỉ một khởi đầu] Thay đổi địa chỉ IP cho máy của bạn. Chạy chương trình AS Administrator (sử dụng "runas" trên dòng lệnh hoặc nhấp chuột phải "Run as Administrator"). Chỉ quản trị viên mới có thể tạo và sử dụng ổ cắm thô trên các phiên bản cửa sổ hiện đại. Ngồi lại và xem chương trình.

Tất cả lưu lượng truy cập mạng được gửi đến mã của bạn (được hiển thị trên màn hình, sẽ không đẹp, với chương trình này).

Bước tiếp theo của bạn là tạo một số bộ lọc giao thức. Tìm hiểu về các giao thức ứng dụng internet khác nhau (giả sử bạn chưa biết), sửa đổi chương trình để kiểm tra các gói. Tìm giao thức HTTP và lưu dữ liệu thích hợp (như yêu cầu GET).

Cá nhân tôi có bộ lọc thiết lập cho AIM (AOL Instant Messenger), HTTP, MSN messenger (Windows Live Messenger), POP và SMTP. Hôm nay, HTTP chỉ là về tất cả mọi thứ kể từ khi những đứa trẻ thích tường facebook để AIM ngày nay.

Khi trẻ tiếp cận tuổi vị thành niên từ đầu đến giữa, bạn sẽ muốn quay trở lại theo dõi. Một số người nói điều này là để cho phép trẻ em “lớn lên”, nhưng lý do thực sự là “bạn không muốn biết”. Tôi đã lùi lại để chỉ thu thập URL nhận yêu cầu và tên người dùng/mật khẩu (cho các tình huống khẩn cấp) đang ở dạng văn bản rõ ràng (pop, auth cơ bản, v.v.).

Tôi không biết điều gì xảy ra trong những năm cuối của tuổi teen; Tôi không thể hình dung mọi thứ trở nên tồi tệ hơn nhiều, nhưng tôi được bảo rằng "Tôi chưa thấy gì cả".

Giống như ai đó trước đó đã nói, điều này chỉ hoạt động khi chạy trên máy mục tiêu (tôi chạy một bản sao trên tất cả các máy trong nhà). Nếu không, để giám sát đơn giản kiểm tra bộ định tuyến của bạn - tôi có một số tính năng ghi nhật ký đẹp.

Nhận xét cuối cùng của tôi là ứng dụng này phải được viết bằng C/C++ với API Win32 trực tiếp và được cài đặt như một dịch vụ đang chạy với quyền quản trị trên máy. Tôi không nghĩ loại mã này phù hợp với C# được quản lý. Bạn có thể đính kèm một giao diện người dùng trong C# để theo dõi và kiểm soát. Bạn phải kỹ sư mã để có tác động đáng chú ý trên hệ thống.

+0

Bạn không nên sử dụng 'Console.WriteLine (cũ);' - nó không có ý nghĩa. Hoặc là 'ex.Message' (hoặc cái gì đó tương tự) hoặc không sử dụng khối try-catch. Thông báo của ngoại lệ sẽ được ghi vào đầu ra tự động. – abatishchev

+1

Tạo một đường hầm ssh an toàn với Proxifier Portable và Putty tới một proxy bên ngoài và tất cả công việc đó đều vô ích: P Tuy nhiên, 1 khi tôi thấy câu trả lời này rất thú vị và điều này sẽ tạo ra một khởi đầu tốt đẹp cho một dự án mới của tôi. –

+0

Cảm ơn bạn rất nhiều vì bài đăng này. Vui lòng cho chúng tôi biết thêm hướng dẫn về cách tạo một số bộ lọc giao thức. Tôi nên tìm gì? Tôi đang cố gắng để google "http giao thức bộ lọc C#" nhưng tôi không khá chắc chắn phải làm gì về tất cả các ký tự ngẫu nhiên mà mã này được viết cho giao diện điều khiển. – Harry

7

Cách tiếp cận của bạn sẽ tùy thuộc vào việc bạn có đang cài đặt ứng dụng này trên cùng một hộp bạn đang sử dụng để duyệt hoặc trên máy chủ proxy riêng biệt hay không.

Nếu bạn đang làm điều này trên một máy chủ riêng biệt sẽ dễ dàng hơn để thực hiện điều này trong mã C#/quản lý, vì bạn sẽ chỉ cần viết một máy chủ proxy C# mà máy khách sẽ có. Không gian tên System.Net.Sockets TcpListener và TcpClient sẽ là bạn của bạn.

Nếu, tuy nhiên, bạn đang cài đặt thiết bị này trên cùng một máy thì hãy xem WinPcap và và SharpPCap và có lẽ Fiddler để biết một số ý tưởng.

Hy vọng điều đó sẽ hữu ích.