2013-02-28 3 views
0

Я работаю над проектом, который контролирует IP и HWID на определенном порту TCPListen, отправленным с клиента, который убивает определенный процесс.block ip by hwid из текстового файла

Монитор работает отлично, я получаю ip и hwid и могу сохранить файлы .txt, но я хочу, чтобы реализовать метод на сервере, как заблокировать ip, прочитав hwid из текстового файла. Если кто-то может мне помочь, я по достоинству оценю это.

Вот часть из кода клиента (отправить), сервер (прием):

Сервер:

textFromClient = ("From: " + tcpClient.Client.RemoteEndPoint + " HWID:" + encoder.GetString(message, 0, bytesRead)); 

Клиент:

byte[] outStream = System.Text.Encoding.ASCII.GetBytes(getUniqueID("C")); 
serverStream.Write(outStream, 0, outStream.Length); 
serverStream.Flush(); 

Я думаю, что понимаю но, возможно, я не объяснил это правильно. Ну, мой сервер прослушивает любой ip на порту 8000. Клиенты автоматически подключаются к серверу ip и порту: пример: 127.0.0.1:8000. Ну клиенты работают так: Когда клиент подключен к серверу, он запускает приложение «.exe». Клиент вынужден убить процесс какого-либо приложения по имени. Я сделал таймер, чтобы убить процесс все время, когда клиент работает. Когда процесс убит, клиент отправляет на сервер IP-адрес с ПК, где процесс был убит, и код HWID: byte[] outStream = System.Text.Encoding.ASCII.GetBytes(getUniqueID("C")); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); и сервер получают в списке ip и hwid. Ну, я собираюсь сделать это. Пример: На этом Recive кода сообщения, где я получаю HWID от клиента encoder.GetString(message, 0, bytesRead) сделать что-то вроде:

if (encoder.GetString(message, 0, bytesRead) = LoadBlockHWID(new FileInfo(@"c:\testfileHWID.txt"))); 

{

// код, чтобы блокировать соединение с указанным IP на HWID.

}

Я whant, что сервер не должен позволить клиенту подключиться к серверу по HWID. Я думаю, что я должен отредактировать сервер, чтобы видеть, что ip и hwid подключены и клиент, чтобы отправить hwid при подключении.

+0

Я думаю, вам нужно показать немного больше того, что вы пытаетесь сделать в отношении этого «блока». Вы хотите защитить определенный HWID от передачи или заблокировать определенные IP-адреса от этого? –

+0

Нет, я хочу заблокировать определенный IP-адрес, который я получил от клиента hwid, получаемый с клиента с ip в одно и то же время. Пример: я получаю mesege на сервере от клиента: «От IP: 127.0.0.1: 54137, HWID: 3928824234AD ". Теперь я хочу заблокировать ip: 127.0.0.1 по HWID, который можно найти в текстовом файле. –

ответ

0

Загрузите свой HWID в список/словарь, прочитав файл перед тем, как приступить к подключению.

в вашем коде, где вы получите tcpClient.Client.RemoteEndPoint, извлеките из него только IPAddress.

Затем сравните IPAddress с списком блоков, и если он совпадает, то посмотрите, соответствует ли HWID, если это соответствует, а затем не выполняет задачу, иначе просто сделайте это.

mBlockCheck = new SO15147104(); 

Вот вам пример. Просто экземпляр класса и в вашей линии, где вы можете захотеть, чтобы блокировать запрос, просто

if (!mBlockCheck.BlockRequest(ip, hwid)) 
{ 
    //Do the operation 
} 

Это класс код, который вы должны быть в состоянии выяснить, из этого.

using System.Collections.Generic; 
using System.IO; 
using System.Net; 

public class SO15147104 
{ 
    private List<string> HWIDLookup; 
    private List<IPAddress> IPAddressLookup; 

    public SO15147104() 
    { 
     HWIDLookup = LoadBlockHWID(new FileInfo(@"c:\testfileHWID.txt")); 
     IPAddressLookup = LoadBlockIPAddresses(new FileInfo(
               @"c:\testfileIPAddresses.txt")); 
    } 


    public bool BlockRequest(IPAddress ip, string HWIDtoCheck) 
    { 
     if (IPAddressLookup.Contains(ip) && 
      HWIDLookup.Contains(HWIDtoCheck.ToUpperInvariant().Trim())) 
     { 
      return true; 
     } 
     return false; 
    } 

    private List<IPAddress> LoadBlockIPAddresses(FileInfo fi) 
    { 
     List<IPAddress> result = new List<IPAddress>(); 

     using (StreamReader sr = fi.OpenText()) 
     { 
      while (!sr.EndOfStream) 
      { 
       IPAddress theIP = IPAddress.Any; 
       string thisLine = sr.ReadLine().Trim(); 
       //This should allow IPv6 and IPv4 to be listed 1IP per Line 
       if (IPAddress.TryParse(thisLine, out theIP)) 
       { 
        result.Add(theIP); 
       } 
      } 
     } 
     return result; 
    } 



    private List<string> LoadBlockHWID(FileInfo fi) 
    { 
     List<string> result = new List<string>(); 

     using (StreamReader sr = fi.OpenText()) 
     { 
      while (!sr.EndOfStream) 
      { 
       result.Add(sr.ReadLine().Trim().ToUpperInvariant()); 
      } 
     } 
     return result; 
    } 
+0

Привет, можете ли вы предоставить мне некоторый код, если возможно? Спасибо! –

+0

Спасибо Я пытаюсь сделать все возможное. –

+0

Можете ли вы предоставить мне электронное письмо, где я могу отправить код, если он есть? У меня есть проблема. –

Смежные вопросы