首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -端口扫描仪

C# -端口扫描仪
EN

Stack Overflow用户
提问于 2018-09-29 15:12:20
回答 1查看 7.6K关注 0票数 3

我试着制作端口扫描器,但由于某些原因,它不能正常工作:

代理列表:

代码语言:javascript
复制
138.68.169.8

我的守则:

代码语言:javascript
复制
    private static string IP = "";

    static void Main(string[] args)
    {
        UserInput();
        PortScan();
        Console.ReadKey();
    }

    private static void UserInput()
    {
        Console.WriteLine("IP Address:", Color.Lime);
        IP = Console.ReadLine();
    }

    private static void PortScan()
    {
        Console.Clear();
        TcpClient Scan = new TcpClient();
        foreach(int s in Ports)
        {
            try
            {
                Scan.Connect(IP, s);
                Console.WriteLine($"[{s}] | OPEN", Color.Green);
            }
            catch
            {
                Console.WriteLine($"[{s}] | CLOSED", Color.Red);
            }
        }
    }

    private static int[] Ports = new int[]
    {
        8080,
        51372,
        31146,
        4145
    };

例外:

代码语言:javascript
复制
[8080] | OPEN
[51372] | CLOSEDSystem.Net.Sockets.SocketException (0x80004005): A connect request was made on an already connected socket

其他端口也有相同的例外。

为什么当代理:端口是不同的时候,它说打开端口?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-29 15:31:51

在已连接的套接字上发出连接请求。

错误消息意味着您已经建立了一个连接,并且您正在尝试使用同一个客户端建立另一个连接。您应该在打开另一个连接之前关闭第一个连接。

我会将TcpClient移动到循环中的using块中,以便连接被关闭,客户端在连接尝试之间被释放:

代码语言:javascript
复制
foreach(int s in Ports)
{
    using (TcpClient Scan = new TcpClient())
    {
        try
        {
            Scan.Connect(IP, s);
            Console.WriteLine($"[{s}] | OPEN", Color.Green);
        }
        catch
        {
            Console.WriteLine($"[{s}] | CLOSED", Color.Red);
        }
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52569696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档