0

我正在工作一个项目,该项目通过 TCPListen 从终止特定进程的客户端发送来监视特定端口上的 IP 和 HWID。

监视器工作完美,我收到 ip 和 hwid 并设法保存到 .txt 文件,但我想做的是在服务器中实现一种方法,如何通过从文本文件中读取 hwid 来阻止 ip。如果有人可以帮助我,我会非常感激。

这是客户端(发送),服务器(接收)代码的一部分:

服务器:

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();

我想我明白了,但也许我解释得不对。好吧,我的服务器监听端口 8000 上的任何 ip。客户端自动连接到服务器 ip 和端口:例如:127.0.0.1:8000。客户端的工作原理是这样的:当客户端连接到服务器时,它运行一个应用程序“.exe”。客户端按名称杀死某些应用程序的进程。我制作了一个计时器,用于在客户端运行时终止进程。当进程被杀死时,客户端从进程被杀死的 pc 和 HWID 代码向服务器发送 IP:byte[] outStream = System.Text.Encoding.ASCII.GetBytes(getUniqueID("C")); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush();服务器在列表框中接收 ip 和 hwid。嗯,我正在考虑这样做。示例:在此接收消息代码中,我从客户端获取 HWIDencoder.GetString(message, 0, bytesRead)以执行以下操作:

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

{

//用于阻止来自 hwid 上指定 IP 的连接的代码。

}

我希望该服务器不应该让客户端通过 HWID 连接到服务器。我想我必须编辑服务器以查看连接的 ip 和 hwid,客户端在连接时发送 hwid。

4

1 回答 1

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;
    }
于 2013-02-28T22:43:14.603 回答