Welcome to HBH! If you have tried to register and didn't get a verification email, please using the following link to resend the verification email.
Simple C++/SFML port scanner - C++ Code Bank
Simple C++/SFML port scanner
A simple CLI port scanner written in C++ using the SFML library.
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
#include<SFML/Network.hpp>
#include<SFML/System.hpp>
std::ostream* out=NULL;
std::string ip;
unsigned short min=1, max=65535;
bool portOpen=false, verbose=false;
sf::Mutex GlobalMutex;
unsigned short step=1;
int usage(){
std::cout << "Usage:\n\tportscan [options] <ip>" << std::endl
<< "Options:" << std::endl
<< "\tv\t\tList unopened ports as closed.\n"
<< "\ti\t\tSet the first port to scan to the following argument.\n"
<< "\te\t\tSet the last port to scan to the following argument.\n"
<< "\to\t\tOutput to file specified in following argument." << std::endl;
return 0;
}
void scanOdd(){
for(unsigned short port=(min+1);port<max;port+=2){
sf::TcpSocket sock;
if(sock.Connect(ip,port)==sf::Socket::Done){
sf::Lock l(GlobalMutex);
(*out) << "Port open: " << port << std::endl;
}
else if(verbose){
sf::Lock l(GlobalMutex);
(*out) << "Port closed: " << port << std::endl;
}
}
}
int main(int argc, char** argv){
sf::Thread t(&scanOdd);
if(argc<2){
return usage();
}
for(int i=1;i<argc;i++){
if(strcmp(argv[i],"-v")==0)
verbose=true;
else if(strcmp(argv[i],"-i")==0){
if(!(argc>=(i+2))) return usage();
std::string temp;
std::stringstream s;
temp=std::string(argv[++i]);
s << temp << std::endl;
s >> min;
}
else if(strcmp(argv[i],"-e")==0){
if(!(argc>=(i+2))) return usage();
std::string temp;
std::stringstream s;
temp=std::string(argv[++i]);
s << temp << std::endl;
s >> max;
}
else if(strcmp(argv[i],"-o")==0){
if(!(argc>=(i+2))) return usage();
out=new std::ofstream(argv[++i]);
}
else if(ip=="")
ip=argv[i];
else return usage();
}
if(ip=="") return usage();
if(max<min) return usage();
if(out==NULL) out=&std::cout;
if(max-min>1000){
step=2;
t.Launch();
}
(*out) << "Scanning ports " << min << " through " << max
<< " at " << ip << std::endl;
sf::Clock c;
c.Reset();
for(unsigned short port=min;port<max;port+=step){
sf::TcpSocket sock;
if(sock.Connect(ip, port)==sf::Socket::Done){
sf::Lock l(GlobalMutex);
portOpen=true;
(*out) << "Port open: " << port << std::endl;
}
else if(verbose){
sf::Lock l(GlobalMutex);
(*out) << "Port closed: " << port << std::endl;
}
}
if(!portOpen&&min==max)
(*out) << "Port " << min << " is not open." << std::endl;
else if(!portOpen)
(*out) << "No open ports, or target is not connected." << std::endl;
(*out) << "Time elapsed: " << c.GetElapsedTime() << std::endl;
}
Comments
Sorry but there are no comments to display