// C# 实现端口扫描
//===========================================================
using System
using System.Collections.Generic
using System.Text
using System.Net
using System.Net.Sockets
using System.Threading
namespace ConsoleApplication3
{
class Program
{
//已扫描端口数目
internal static int scannedCount = 0
internal static int runningThreadCount = 0
internal static List <int>openedPorts = new List <int>()
static int startPort = 1
static int endPort = 500
static int maxThread = 100
static void Main(string[] args)
{
//简单提示
Console.WriteLine("////////////////////////////////////////////////////////////////////////////////////")
Console.WriteLine("// WriterFeeling")
Console.WriteLine("////////////////////////////////////////////////////////////////////////////////////")
Console.WriteLine("请输入要扫描的主机;")
string host = Console.ReadLine()
Console.WriteLine("请输入扫描的端口 例如:1-800")
string portRange =Console.ReadLine()
startPort = int.Parse(portRange.Split('-')[0].Trim())
endPort = int.Parse(portRange.Split('-')[1].Trim())
for (int port = startPortport <endPortport++)
{
Scanner scanner = new Scanner(host, port)
Thread thread = new Thread(new ThreadStart(scanner.Scan))
thread.Name = port.ToString()
thread.IsBackground = true
thread.Start()
runningThreadCount++
Thread.Sleep(10)
//循环,直到某个线程工作完毕才启动另一新线程,也可以叫做推拉窗技术
while (runningThreadCount >= maxThread)
}
//空循环,直到所有端口扫描完毕
while (scannedCount + 1 <(endPort - startPort))
Console.WriteLine()
Console.WriteLine()
//输出结果
Console.WriteLine("Scan for host:{0} has been completed, \n total {1} ports scanned, \n opened ports:{2}", host, (endPort - startPort), openedPorts.Count)
foreach (int port in openedPorts)
{
Console.WriteLine("\tport: {0} is open", port.ToString().PadLeft(6))
}
Console.ReadLine()
}
}
class Scanner
{
string m_host
int m_port
public Scanner(string host, int port)
{
m_host = host
m_port = port
}
public void Scan()
{
TcpClient tc = new TcpClient()
tc.SendTimeout = tc.ReceiveTimeout = 2000
try
{
tc.Connect(m_host, m_port)
if (tc.Connected)
{
Console.WriteLine("Port {0} is Open", m_port.ToString().PadRight(6))
Program.openedPorts.Add(m_port)
}
}
catch
{
Console.WriteLine("Port {0} is Closed", m_port.ToString().PadRight(6))
}
finally
{
tc.Close()
tc = null
Program.scannedCount++
Program.runningThreadCount--
}
}
}
}
我们知道,在很多网络工作中,都需要代理IP的支持,比如说网络投票、效果补量、网购下单、市场分析等等,没有代理IP的支撑,工作还确实不太好进行下去,那么代理IP从哪里来呢?一、收集免费代理IP
网络上有很多免费的代理IP,这些IP不要钱,虽然效率低下,但对于一些低预算的工作者来说,牺牲时间来降低成本也是能够接受的。
二、第三方工具
网络上有很多集成工具,里边有很多代理IP,可以一键切换IP,虽然效率比较低,用的人比较多,速度比较卡,对于一些手动操作的业务或者单线程挂机业务来说还是勉强能够胜任的,对于一些多线程的任务来说,就没办法支撑了,比如说爬虫工作任务。
三、购买代理IP
网络上有很多收费的代理IP,比起免费代理IP来说,效率会高很多。比如说极光代理IP,高匿名代理IP,独享IP池,有效率高,稳定性好,速度快,对于网络工作的支持非常给力,有需要的朋友能够根据自己的需要开展选择。
四、自建IP池
很多朋友的任务量比较大,要求比较高,比如说无限制的调用API提取IP,无限制的使用代理IP。自建IP池的要求比较高,费用也比较高,费时也比较多,需要自己采购服务器,自己管理代理IP池,然后再完成自己的目标工作任务。
以上是获取代理IP的比较常用的四种方法,希望能对你有所帮助。当然还是有很多其他的方法,要选择适合自己业务的哦
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)