實現的功能,輸入開始端口,結束端口,能夠掃描到從開始端口到結束端口之間有哪些端口是開放的,那些事沒有開放的。 ios
具體的代碼以下: socket
#include <winsock2.h>
#include <windef.h>
#include
<iostream>
#include <vector>
#pragma
comment(lib,"ws2_32.lib") ide
using namespace std; 函數
void CopyRight();
typedef unsigned int uint;
vector<uint>
v;
int main()
{
WORD wsVersion = MAKEWORD(2,0); //socket的版本
WSADATA wsaData; //這個結構被用來存儲被WSAStartup函數調用後返回的Windows
Sockets數據。它包含Winsock.dll 執行的數據。
struct sockaddr_in
sin; //sockaddr_in結構,表示socket address and internet style
uint
BeginPort; //開始端口
uint EndPort; //結束端口
uint
CurrentPort; //正在掃描的端口
uint i=0;
char HostName[256]; //要掃描的主機
SOCKET s; //保存建立socket時的返回值
int OpenPort; //開放端口個數
OpenPort = 0; ui
CopyRight(); spa
cout<<"Please input the
HostName:";
cin>>HostName;
cout<<"Input the Begin
Port:";
cin>>BeginPort;
cout<<"Input the End
port:";
cin>>EndPort; orm
//對用戶輸入的端口進行判斷
while((BeginPort > EndPort || BeginPort < 0 ||
BeginPort >65535 || EndPort <0 || EndPort >65535))
{
cout<<"You have input some wrong paramters.Try
again."<<endl;
cout<<"Please input the
HostName:";
cin>>HostName;
cout<<"Input the Begin
Port:";
cin>>BeginPort;
cout<<"Input the End
port:";
cin>>EndPort;
} ci
if(WSAStartup(wsVersion,&wsaData))
{
cout<<"Initial
Failed!"<<endl; return -1;
}
cout<<endl<<"Now Scan
"<<HostName<<"'s Specified Ports
Status."<<endl<<endl; input
//循環判斷範圍內的端口,以判斷端口是否開放 ,並記錄結果
for(CurrentPort=BeginPort;
CurrentPort<=EndPort;++CurrentPort)
{
s =
socket(AF_INET,SOCK_STREAM,0);
if(s == INVALID_SOCKET)
{
cout<<"Establish Socket Failed."<<endl; WSACleanup();
}
//給結構成員賦值
sin.sin_family = AF_INET;
sin.sin_port = htons(CurrentPort);
sin.sin_addr.S_un.S_addr =
inet_addr(HostName);
//創建連結
if(connect(s,(struct
sockaddr*)&sin,sizeof(sin)) == SOCKET_ERROR)
{
cout<<"Port: "<<CurrentPort<<", Status: Not
open."<<endl;
closesocket(s);
}
else
{
cout<<"Port: "<<CurrentPort<<", Status:
Opened."<<endl;
OpenPort ++;
v.push_back(CurrentPort); closesocket(s);
}
} it
cout<<endl<<"Resaults: Host "<<HostName<<" has
opened "<<OpenPort<<" port.Opened port as follow:"<<endl;
cout<<"===================================================================="<<endl;
for(i=0;i<v.size();++i)
{
cout<<v.at(i)<<"
";
if((i+1)%10==0)cout<<endl;
}
cout<<endl;
cout<<"===================================================================="<<endl;
closesocket(s);
WSACleanup();
return 0;
}
//如下爲版權函數內容 void CopyRight() { cout<<"PortScan V1.0 by:Code Panda."<<endl; cout<<"======================================================"<<endl; cout<<"Mail: ; cout<<"Q Q: 512711380"<<endl; cout<<"Motto:Stormrise,self-confidence unchanged."<<endl; cout<<"======================================================"<<endl<<endl; }