<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[ 端口扫描程序实现原理]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sun, 21 Mar 2010 15:47:05 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	 原创&nbsp;&nbsp;端口扫描程序实现原理 收藏<br/><br/>以前看过很多网络相关方面的程式源码， 但时间长了都忘了怎么实现的了， 因此，想将以后看过的源码实现方式记录下来， 以免下次再得找资源！<br/><br/>其实端口扫描程式的原理很简单， 利用socket连接指定IP的端口， 根据其返回值就可以得知目标机器是否开启了这个端口，<br/><br/>实现步骤如下：<br/><br/>1. 创建socket<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;c_socket = socket ( AF_INET, SOCK_STREAM, 0 );<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ( c_socket == SOCKET_ERROR )<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf (&quot; create socket fault!&#92;n &quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>2. 连接目示机器<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;struct sockaddr_in remoteaddr;<br/>&nbsp;&nbsp;&nbsp;&nbsp;struct hostent*&nbsp;&nbsp;&nbsp;&nbsp;remotehost;<br/>&nbsp;&nbsp;&nbsp;&nbsp;remoteaddr.sin_family = AF_INET;<br/>&nbsp;&nbsp;&nbsp;&nbsp;remoteaddr.sin_addr.s_addr&nbsp;&nbsp; = inet_addr ( Address );<br/>&nbsp;&nbsp;&nbsp;&nbsp;remoteaddr.sin_port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= htons ( cPort );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//连接<br/>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;( connect ( c_socket, (SOCKADDR*) &amp;remoteaddr, sizeof ( struct sockaddr_in ) ) == SOCKET_ERROR )<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf (&quot;&lt; %3d &gt;&nbsp;&nbsp;connect port %5d&nbsp;&nbsp;...&#92;n&quot;,ThreadID,cPort ) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closesocket( c_socket);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;closesocket( c_socket);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;printf (&quot;&lt; %3d &gt;&nbsp;&nbsp;connect port %5d&nbsp;&nbsp;succeed&#92;n&quot;,ThreadID,cPort ) ;<br/><br/>也可以利用多线程技术实现， 只要给每个线程分配好指定的扫描端口段就可以了<br/><br/>来源：<br/>http://blog.csdn.net/study_live/archive/2009/09/28/4604673.aspx
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论]  端口扫描程序实现原理]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>