Мне тоже неясно, как изменить настройки прокси, но что касается мониторинга самой сети, думаю, я могу помочь с этим.
Для мониторинга IP-трафика в сети вы 'Я захочу создать «сырой» (или разнородный) сокет.Вы должны иметь права администратора на локальном блоке для создания такого сокета, но пока ваша служба Windows работает под системной учетной записью, у вас должно быть все в порядке (кстати, именно это я и делаю в моем случае).
Чтобы создать необработанный сокет, сделайте что-то вроде этого:
using System.Net.Sockets;
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
s.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.1"), 0)); // use your local IP
byte[] incoming = BitConverter.GetBytes(1);
byte[] outgoing = BitConverter.GetBytes(1);
s.IOControl(IOControlCode.ReceiveAll, incoming, outgoing);
s.ReceiveBufferSize = 8 * 1024 * 1024; // 8MB
Теперь вы можете использовать этот сокет для получения всех входящих и исходящих IP-пакетов на указанный локальный IP-адрес.
В вашей службе Windows добавьте следующие поля:
using System.Threading;
private ManualResetEvent _shutdownEvent = new ManualResetEvent(false);
private Thread _thread;
private Socket _socket;
В обратном вызове OnStart()
вашей службы Windows создайте поток, который будет выполнять эту работу:
protected override void OnStart(string[] args)
{
_thread = new Thread(delegate() {
// Initialize the socket here
while (!_shutdownEvent.WaitOne(0)) {
// Receive the next packet from the socket
// Process packet, e.g., extract source/destination IP addresses/ports
// Modify proxy settings?
}
// Close socket
});
_thread.Name = "Monitor Thread";
_thread.IsBackground = true;
_thread.Start();
}
При обратном вызове OnStop()
службы Windows вам нужно сообщить о завершении потока:
protected override void OnStop()
{
_shutdownEvent.Set();
if (!_thread.Join(3000)) { // give the thread 3 seconds to stop
_thread.Abort();
}
}
Надеюсь, этого достаточно для начала работы.