返回信息流/********************************************/
/* 端口扫描器 源代码 */
/* PortScanner.cpp */
/********************************************/
#include <stdio.h>
#include <string.h>
#include <winsock.h>
int main(int argc, char *argv[]) {
int mysocket;
int pcount = 0;
struct sockaddr_in my_addr;
WSADATA wsaData;
WORD wVersionRequested=MAKEWORD(1,1);
if(argc < 3) {
printf("usage: %s <host> <maxport>\n", argv[0]);
exit(1);
}
if (WSAStartup(wVersionRequested , &wsaData)){
printf("Winsock Initialization failed.\n");
exit(1);
}
for(int i=1; i < atoi(argv[2]); i++){
if((mysocket = socket(AF_INET, SOCK_STREAM,0)) == INVALID_SOCKET){
printf("Socket Error");
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(i);
my_addr.sin_addr.s_addr = inet_addr(argv[1]);
if(connect(mysocket, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == SOCKET_ERROR)
closesocket(mysocket);
else{
pcount++;
printf("Port %d - open\n", i);
}}
printf("%d ports open on host - %s\n", pcount, argv[1]);
closesocket(mysocket);
WSACleanup();
return 0;
}
这个程序使用C++编译,程序中关键代码是“my_addr.sin_port = htons(i)”,因为变量i是一个循环量,它从一开始到使用者设定值结束,而htons(i)则是对连接远程服务器需要使用的端口进行定义,之后使用connect()函数连接指定端口,通过返回值判断这个端口是否打开,这样一个端口扫描的思路就出现了。
程序中用到的socket函数库是专门实现网络连接的一套综合函数库.
这是一条镜像帖。来源:北邮人论坛 / security / #1980同步于 2006/5/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
编写一个简单的端口扫描程序
kissblue
2006/5/31镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
【 在 bnuer 的大作中提到: 】
: Orz 你的Portscanner未免太简单了 -_-
: 还不如直接 nc -vv 192.168.0.2 134-446 -t 3 -z
上传个nc吧。。。。