日期:2014-05-19  浏览次数:21033 次

端口扫描,是否能真正的检测到端口是否占用
端口扫描有人用TcpClient,有人用Socket,但都不能真正探测到一个端口是否打开,Why??

//直接使用高级的TcpClient类
System.Net.Sockets.TcpClient   tc=new   System.Net.Sockets.TcpClient();
//设置超时时间
tc.SendTimeout=tc.ReceiveTimeout=2000;
try
{
Console.WriteLine( "Checking   port:{0} ",m_port);
//尝试连接
tc.Connect(m_host,m_port);
}
catch(System.Net.Sockets.SocketException   ex)
{//端口未开放
}


Or:


//创建一个socket去尝试连接主机和端口
System.Net.IPAddress   hostAdd=System.Net.Dns.GetHostByName(m_Host).AddressList[0];
System.Net.IPEndPoint   EPhost=new   System.Net.IPEndPoint(hostAdd,m_Port);
System.Net.Sockets.Socket   socket=new   System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,System.Net.Sockets.SocketType.Stream,System.Net.Sockets.ProtocolType.Tcp);
try
{
socket.Connect(EPhost);
//最好捕捉异常,因为Connected很不准确
}
catch(System.Net.Sockets.SocketException   ex)
{//端口未开放
}


请高手指点

------解决方案--------------------
网络上的答案都是利用出错判断法,不过肯定有更好的
毕竟利用错误来扫描,一来无法判断占用软件,二来速度太慢。而且容易造成系统的直接崩溃。

===================================================
技术交流不该有界限 资源共享不该有条件
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明: <我的帖子我做主,结贴率保持100%>
1、欢迎一切问题有关的交流——无论答案对错;
2、不欢迎 顶、Mark、支持之类口水混分的人;
我保留对非 <散分贴> 蹭分者的厌恶和鄙视...
精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
所以,我没有精通,只有JZ
===================================================
------解决方案--------------------