一个SCO UNIX下端口扫描的C程序

发表于:2007-06-08来源:作者:点击数: 标签:
/*****************************************/ /*W.X.Y.2001-3编译成功*/ /*运行于SCO UNIX 系统*/ /*****************************************/ #includestdio.h #includesys/types.h #includesys/socket.h #includenetinet/in.h #includeerrno.h #include

/*****************************************/
/* W.X.Y.2001-3 编译成功                 */
/* 运行于SCO UNIX 系统                   */
/*****************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <netdb.h>
#include <signal.h>

int main(int argc, char **argv)
{
int probeport = 0;
struct hostent *host;
int err, i, net;
int startport,endport;
struct sockaddr_in sa;

startport=1;
endport=700;
if(argc==3)
{
startport=endport=atoi(argv[2]);
}
if(argc==4)
{
startport=atoi(argv[2]);
endport=atoi(argv[3]);
}

for(i=startport;i<endport+1;i++)
{
strncpy((char *)&sa,"",sizeof sa);
sa.sin_family = AF_INET;

if(isdigit(*argv[1]))
sa.sin_addr.s_addr = inet_addr(argv [1]);
else if((host = gethostbyname(argv[1])) != 0)
strncpy((char *)&sa.sin_addr, (char *)host->h_addr,sizeof sa.sin_addr);
else 
{
/*pherror(argv [1]); */ 
printf("Usage: portscan address|hostname [start_port end_port]\n");
printf(" default port number from %d to %d\n",startport,endport);
exit (2);
}

sa.sin_port = htons(i);
net = socket(AF_INET,SOCK_STREAM,0);
if(net<0)
{
perror("\nsocket");
exit(2);
}
err = connect(net,(struct sockaddr *) &sa,sizeof sa);
if(err<0)
{
/* 
printf("%s %-5d %s\r",argv[1],i,strerror(errno));
*/ 
printf("\r");
fflush(stdout);
if(argc==3)
printf("%s %-5d refused. \n",argv[1],i);

else 
{
printf("%s %-5d aclearcase/" target="_blank" >ccepted. \n",argv[1],i);
if(shutdown(net,2)<0)
{
perror("\nshutdown");
exit(2);
}
}
close(net);
}
printf("\r");
fflush(stdout);
return(0);
}

/*程序结束*/

/*编译方法:*/

/* $cc -o portscan portscan.c -lnsl -lsocket*/

 jysww 回复于:2003-02-19 22:43:15
up!

 yujf 回复于:2003-08-29 10:58:19
怎么没有注释呀?可以提供点吗?

原文转自:http://www.ltesting.net