问题描述,加断点调试,openPort有值,但直接运行openPort就为空了。这是怎么回事啊
C# codestatic List<string> openPort=new List<string>();
string scanPort="";
static void Main(string[] args)
{
Scan(ip, startPort, endPort); //端口扫描
for(int i=0;i<openPort.Count;i++)
{
scanPort++;
}
} static void Scan(IPAddress ip, int startPort, int endPort)
{
Random rand = new Random((int)DateTime.Now.Ticks);
Console.WriteLine("Begin Scan...");
for (int port = startPort; port < endPort; port++)
{
Socket scanSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
//寻找一个未使用的端口进行绑定
do
{
try
{
scanSocket.Bind(new IPEndPoint(IPAddress.Any, rand.Next(65535)));
break;
}
catch
{
//绑定失败
}
} while (true);
try
{
scanSocket.BeginConnect(new IPEndPoint(ip, port), ScanCallBack, new ArrayList() { scanSocket, port});
}
catch
{
continue;
}
}
Console.WriteLine("Port Scan Completed!");
}
/// <summary>
/// BeginConnect的回调函数
/// </summary>
/// <param name="result">异步Connect的结果</param>
static void ScanCallBack(IAsyncResult result)
{
//解析 回调函数输入 参数
ArrayList arrList = (ArrayList)result.AsyncState;
Socket scanSocket = (Socket)arrList[0];
int port = (int)arrList[1];
//判断端口是否开放
if (result.IsCompleted && scanSocket.Connected)
{
openPort.Add("port {0,5}\tOpen.", port);
}
else
{
openPort.Add("port {0,5}\tClosed.", port);
}
//关闭套接字
scanSocket.Close();
}
C# codestatic List<string> openPort=new List<string>();
string scanPort="";
static void Main(string[] args)
{
Scan(ip, startPort, endPort); //端口扫描
for(int i=0;i<openPort.Count;i++)
{
scanPort++;
}
} static void Scan(IPAddress ip, int startPort, int endPort)
{
Random rand = new Random((int)DateTime.Now.Ticks);
Console.WriteLine("Begin Scan...");
for (int port = startPort; port < endPort; port++)
{
Socket scanSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
//寻找一个未使用的端口进行绑定
do
{
try
{
scanSocket.Bind(new IPEndPoint(IPAddress.Any, rand.Next(65535)));
break;
}
catch
{
//绑定失败
}
} while (true);
try
{
scanSocket.BeginConnect(new IPEndPoint(ip, port), ScanCallBack, new ArrayList() { scanSocket, port});
}
catch
{
continue;
}
}
Console.WriteLine("Port Scan Completed!");
}
/// <summary>
/// BeginConnect的回调函数
/// </summary>
/// <param name="result">异步Connect的结果</param>
static void ScanCallBack(IAsyncResult result)
{
//解析 回调函数输入 参数
ArrayList arrList = (ArrayList)result.AsyncState;
Socket scanSocket = (Socket)arrList[0];
int port = (int)arrList[1];
//判断端口是否开放
if (result.IsCompleted && scanSocket.Connected)
{
openPort.Add("port {0,5}\tOpen.", port);
}
else
{
openPort.Add("port {0,5}\tClosed.", port);
}
//关闭套接字
scanSocket.Close();
}
解决方案 »
- 跪求C#怎么创建vpn连接,并且拨号,挂断。易语言为什么有,郁闷了
- 在函数中不改变参数的值,用普通传递还是ref传递哪种效率高??
- 求解:dataGrid外button调用EditCommand事件的方法 !!
- winform中怎样使datagrid的cell不能获得焦点?
- 高手请进,dataGrid真的可以绑定所有实现 IList 的对象?我的例子怎么不行。
- .net 返回oracle程序包的问题
- 菜鸟求助
- .net tabcontrol 外观
- 真么使richtextbox执行undo操作?
- 怎样从一个包含完整路径的string中取得文件名
- 求高人指教,我是C#初学者,想提取txt文件中的内容
- 求做一个占资源的程序
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Collections;namespace Test
{ public class Demo
{
static List<string> openPort = new List<string>();
string scanPort = ""; static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse("192.168.1.68");
Int32 scanPort = 0; Scan(ip, UInt16.MinValue, UInt16.MaxValue,1000); //端口扫描
for (int i = 0; i < openPort.Count; i++)
{
scanPort++;
}
} static void Scan(IPAddress ip, UInt16 startPort, UInt16 endPort, UInt16 maxCount)
{
Random rand = new Random((int)DateTime.Now.Ticks);
Console.WriteLine("Begin Scan...");
for (int port = startPort; port < endPort; port++)
{
Socket scanSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
//寻找一个未使用的端口进行绑定
do
{
try
{
scanSocket.Bind(new IPEndPoint(IPAddress.Any, rand.Next(65535)));
break;
}
catch
{
//绑定失败
}
} while (true); try
{
scanSocket.BeginConnect(new IPEndPoint(ip, port), ScanCallBack, new ArrayList() { scanSocket, port });
}
catch
{
continue;
} if (openPort.Count >= maxCount)
{
return;
}
} Console.WriteLine("Port Scan Completed!");
} /// <summary>
/// BeginConnect的回调函数
/// </summary>
/// <param name="result">异步Connect的结果</param>
static void ScanCallBack(IAsyncResult result)
{
//解析 回调函数输入 参数
ArrayList arrList = (ArrayList)result.AsyncState;
Socket scanSocket = (Socket)arrList[0];
int port = (int)arrList[1];
//判断端口是否开放
if (result.IsCompleted && scanSocket.Connected)
{
openPort.Add(String.Format("port {0,5}\tOpen.", port));
}
else
{
openPort.Add(String.Format("port {0,5}\tClosed.", port));
}
//关闭套接字
scanSocket.Close(); }
}
}
{
Scan(ip, startPort, endPort); //端口扫描
for(int i=0;i<openPort.Count;i++)
{
scanPort++; }
}
上面你的代码中scanPort不是定义为一个string变量么,怎么你在下面这里把它进行++操作呢?没看懂
如果我把方法写到一个类中呢,然后在Main函数下调用可以吗