Title:C写的扫描器源码 --2010-10-27 20:02

无意间看见的一个源代码,弄回来读下。

-----------------------------------------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <winsock.h>

#define NETWORK_ERROR -1
#define NETWORK_OK 0
#define PORT_MIN 1
#define PORT_MAX 65535

HANDLE hThread;
DWORD hID;

char hostname[30];

int starting_port = 0;
int ending_port = 0;
int nopen = 0;

DWORD portscan();

int main(){
int ret;

WSADATA dat;
DWORD version;

version = MAKEWORD(2,2);

ret = WSAStartup(version,&dat);

if(ret != 0){
printf("Error initializing Winsock.\n");
WSACleanup();
return NETWORK_ERROR;
}
if(ret == 0){

printf("Enter hostname:");
scanf("%s",hostname);

printf("Enter starting port:");
scanf("%d",&starting_port);

if(starting_port < PORT_MIN){
printf("Invalid port number.\n");
WSACleanup();
return NETWORK_ERROR;
}

printf("Enter ending port:");
scanf("%d",&ending_port);

if(ending_port > PORT_MAX){
printf("Invalid port number.\n");
WSACleanup();
return NETWORK_ERROR;
}

printf("\nScanning [%s]...\n",hostname);

hThread = CreateThread(0,0,(LPTHREAD_START_ROUTINE)portscan,0,0,&hID);

if(hThread == 0){
printf("Failed to create thread.\n");
WSACleanup();
return NETWORK_ERROR;
}
sleep(-1);
}
WSACleanup();
return NETWORK_OK;
}

DWORD portscan(){
int i,nret;

SOCKET thesocket;
LPHOSTENT hostent;

thesocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
hostent = gethostbyname((hostname));

for(i = starting_port;i < ending_port+1;++i){

SOCKADDR_IN hostinfo;

hostinfo.sin_family = AF_INET;
hostinfo.sin_addr=*((LPIN_ADDR)*hostent->h_addr_list);
hostinfo.sin_port = htons(i);

nret = connect(thesocket,(LPSOCKADDR)&hostinfo,sizeof(hostinfo));

if(nret == 0){
printf("\n\t%d\n",i);
++nopen;
}
}

printf("\nScan complete.\n\n");
printf("Number of ports opened = %d\n",nopen);

closesocket(thesocket);
}

-----------------------------------------------------------------------------------------------------------------------------------
本文: 黑客武林

C写的扫描器源码的更多相关文章

  1. 手写Koa.js源码

    用Node.js写一个web服务器,我前面已经写过两篇文章了: 第一篇是不使用任何框架也能搭建一个web服务器,主要是熟悉Node.js原生API的使用:使用Node.js原生API写一个web服务器 ...

  2. 手写@koa/router源码

    上一篇文章我们讲了Koa的基本架构,可以看到Koa的基本架构只有中间件内核,并没有其他功能,路由功能也没有.要实现路由功能我们必须引入第三方中间件,本文要讲的路由中间件是@koa/router,这个中 ...

  3. windows内存体系结构 内存查询,读,写(附录源码)

    “进程内存管理器”这个程序实现的最基本功能也就是对内存的读写,之前的两篇文章也就是做的一个铺垫,介绍了内核模式切换和IoDeviceControl函数进行的应用程序与驱动程序通信的问题.接下来就进入正 ...

  4. 手写Express.js源码

    上一篇文章我们讲了怎么用Node.js原生API来写一个web服务器,虽然代码比较丑,但是基本功能还是有的.但是一般我们不会直接用原生API来写,而是借助框架来做,比如本文要讲的Express.通过上 ...

  5. C#inSSIDer强大的wifi无线热点信号扫描器源码

    一个完整的无线信号扫描工具源码,包含了从热点扫描到强度绘制以及信号变换曲线图.源码基于Managed Wifi实现基础功能,Managed Wifi也是开源项目,这个可以在本站搜索到. 指定网卡信号扫 ...

  6. 学习写简单Spring源码demo

    最近在研究怎么实现简单的Spring的源码,通过注解的方式来实现对bean的加载管理. 首先先来看下我的工程结构: (1)spring-common:定义了常用的枚举常量,工具类(如FileUtils ...

  7. HDFS dfsclient写文件过程 源码分析

    HDFS写入文件的重要概念 HDFS一个文件由多个block构成.HDFS在进行block读写的时候是以packet(默认每个packet为64K)为单位进行的.每一个packet由若干个chunk( ...

  8. 使用dom4j写xml文件——源码

    1 dom4j下载与配置 1.1 dom4j下载 请移步下载链接 1.2 maven依赖 <dependency> <groupId>org.dom4j</groupId ...

  9. php写购物车(思路&源码)

    本文介绍一个php实现的购物车代码,功能实现完整,具有一定的参考价值 这里我们为你提供个简单的php购物车代码,从增加购物产品与发生购买了,在商城开发中,这个功能是少不了的 具体分析如下: 对购物车里 ...

随机推荐

  1. websocket nova vnc proxy

    1. vnc proxy的实现原理 vnc 是nova提供的用来访问虚拟机的一项重要功能,用户可以通过websocket来访问,也可以通过java客户端来访问.通过websket访问虚拟机 的功能已经 ...

  2. windows 编程 —— 消息与参数(定时器、初始化消息、改变大小)

    目录: 定时器 WM_TIMER 初始化消息 WM_CREATE 改变大小 WM_SIZE 定时器: 接收消息:WM_TIMER 参数wParam:wParam参数等于定时器的ID值(上述情形为1). ...

  3. JSP具体篇——out

    out对象 out对象用于在web浏览器上输出信息,而且管理应用server上的输出缓冲区.在使用out对象输出数据时.能够对数据缓冲区进行操作.及时清除缓冲区中残留的数据.为其它输出让出缓冲空间. ...

  4. 1033 - Merging Maps

    Pictures taken from an airplane or satellite of an ar ea to be mapped are often of sufficiently high ...

  5. Tinyxml 操作XML

    对于xml文件,目前的工作只是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这种重量级的xml解析器,特别是使用msxml解析xml涉及到复杂的com类型转换,更是令人感觉繁琐. ...

  6. shell 判断文件、目录是否存在

    shell判断文件是否存在   1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath="/var/log/httpd/" 5. m ...

  7. Eclipse中Java文件图标由实心J变成空心J的问题

    在eclipse中空心J的java文件,表示不被包含在项目中进行编译,而是当做资源存在项目中.例如 当是单个文件为空心J的时候 1.右击该文件 -- >BuildPath -->Inclu ...

  8. Oracle 11g详细安装配置教程

    最近开始学习Oracle数据库了,根据我的理解Oracle数据库是一种强大.复杂.高性能的数据库,而且价格不菲,使用都是中大型企业,土豪专用.学习一种数据库的入门工作就是先安装这种数据库,鉴于大批道友 ...

  9. string与stringbuilder的区别

    1.分析string与stringbuilder的区别,我们先来看下面一段代码 首先我们使用string进行字符串的拼接 class Program { static void Main(string ...

  10. 使用CAEmitterLayer产生粒子效果

    ViewController.m #import "ViewController.h" @implementation ViewController - (void)viewDid ...