/*
Name: NetxPort
Copyright: Netxfly
Author: Netxfly
Date: 12-10-04
Description: A simple Port scanner
*/
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void usage(char *); //帮助函数
void scan(char *); //常用端口扫描
void scan1(char *,char *, char *); //自定义端口扫描
void scan2(char *, char *2); //多主机常用端口扫描
void scan3(char *, char *, char *, char *);
//多主机自定义端口扫描
//////////////////////////////////////////////////////////////////
//主函数
//////////////////////////////////////////////////////////////////
int main(int argc,char *argv[])
{
if(argc==2)
{
scan(argv[1]); //常用端口扫描
}
else if(argc==3) //多主机常用端口扫描
{
scan2(argv[1],argv[2]);
}
else if(argc==4)
{
scan1(argv[1],argv[2],argv[3]); //自定义端口扫描
}
else if(argc==5)
{
scan3(argv[1],argv[2],argv[3],argv[4]); //多主机自定义端口扫描
}
else
{
usage(argv[0]);
}
}
/////////////////////////////////////////////////////////////////////////
//帮助函数 void usage(char *help)
/////////////////////////////////////////////////////////////////////////
void usage(char *help)
{
printf("====================================================================/n");
printf("NetxPort Version 1.0 by Netxfly 12-10-2004 /n");
printf("Welcome to visit http://netxfly.126.com/n");
printf("Usage:/n");
printf("%s <target>/t/t/t/t常用端口扫描/n",help);
printf("%s <target> <port1> <port2>/t/t自定义端口扫描/n",help);
printf("%s <target1> <target2>/t/t/t多主机常用端口扫描/n",help);
printf("%s <target1> <target2> <port1> <port2>/t多主机自定义端口扫描/n",help);
printf("====================================================================/n");
return ;
}
////////////////////////////////////////////////////////////////////////////
//常用端口扫描 void scan(char *target)
////////////////////////////////////////////////////////////////////////////
void scan(char *target)
{
WSADATA wsadata;
SOCKET netxfly;
int i;
struct sockaddr_in server;
int ports[12] = {21,23,25,53,80,110,135,139,445,1433,3306,3389};
if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
{
printf("Startup Winsock Failed.../n");
exit(-1);
}
for(i=0;i<12;i++)
{
if((netxfly = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
{
printf("Create Socket Err.../r/n");
exit(-1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=inet_addr(target);
server.sin_port = htons(ports[i]);
if(connect(netxfly,(struct sockaddr*)&server,sizeof(server)) != SOCKET_ERROR)
{
printf("port %d is open at Host:%s/r/n",ports[i],target);
closesocket(netxfly);
}
else
{
closesocket(netxfly);
}
}
WSACleanup();
}
////////////////////////////////////////////////////////////////////////////
//自定义端口扫描 void scan1(char *target,char *start, char *end)
////////////////////////////////////////////////////////////////////////////
void scan1(char *target,char *start, char *end)
{
WSADATA wsadata;
SOCKET netxfly;
int i;
int port1;
int port2;
struct sockaddr_in server;
if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
{
printf("Startup Winsock Failed.../n");
exit(-1);
}
port1=atoi(start);
port2=atoi(end);
for(i=port1;i<=port2;i++)
{
if((netxfly = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
{
printf("Create Socket Err.../r/n");
exit(-1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=inet_addr(target);
server.sin_port = htons(i);
if(connect(netxfly,(struct sockaddr*)&server,sizeof(server)) != SOCKET_ERROR)
{
printf("port %d is open at Host:%s/r/n",i,target);
closesocket(netxfly);
}
else
{
closesocket(netxfly);
}
}
WSACleanup();
}
///////////////////////////////////////////////////////////////////////////
//多主机常用端口扫描 void scan2(char *target1, char *target2)
///////////////////////////////////////////////////////////////////////////
void scan2(char *target1, char *target2)
{
unsigned long i;
unsigned long start1;
unsigned long start2;
char *target;
start1=ntohl(inet_addr(target1)); //Ascll->Network->Host
start2=ntohl(inet_addr(target2)); //Ascll->Network->Host
for(i=start1;i<=start2;i++)
{
target=inet_ntoa(htonl(i)); //host->network->Ascii
//由主机顺序->网络顺序->字符点格式,让scan()调用
scan(target);
}
}
////////////////////////////////////////////////////////////////////////////
//多主机自定义端口扫描
//void scan3(char *target, char *target2, char *start, char *end)
///////////////////////////////////////////////////////////////////////////
void scan3(char *target, char *target2, char *start, char *end)
{
}
在我在Blog中可以更好看清楚代码
http://www.blogbus.com/blogbus/blog...?diaryid=536479
PS:我是在网吧写的,没有VC,用的是dev c++和Lcc