C++實現端口掃描

實現的功能,輸入開始端口,結束端口,能夠掃描到從開始端口到結束端口之間有哪些端口是開放的,那些事沒有開放的。 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; }

相關文章
相關標籤/搜索