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. 比较了一下基于PhoneGAP/JQ Mobile 等基于HTML5的Phone 开发框架

    比较了一下基于PhoneGAP/JQ Mobile 等基于HTML5的Phone 开发框架,如果做APP客户端的化,想达到Native UI的效果,都是胡扯的,根本不可能. PhoneGAP 如果想达 ...

  2. mybatis使用时org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):的错误

    最近在使用mybatis时,出现了 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 这 ...

  3. jquery trigger传值

    方法1: var e = $.Event('ok.menu.table', { relatedTarget: $el }) that.$el.trigger(e); 接受方法如下.此时,related ...

  4. mysql如何删除重复记录

    方法有很多,除了最简便的, alter ignore table 表名  add UNIQUE index(字段名); 然后再将索引drop掉,这个方法外. 更加中规中矩的方法也是有的.. 比如我在网 ...

  5. Android Studio常用插件

    ButterKnife 这个开源库可以让我们从大量的findViewById()和setonclicktListener()解放出来,其对性能的影响微乎其微(查看过Butter Knife的源码,其自 ...

  6. HDU1247 Hat’s Words 【trie树】

    Hat's Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  7. [置顶] 我的Android进阶之旅------>介绍一款集录制与剪辑为一体的屏幕GIF 动画制作工具 GifCam

    由于上一篇文章:我的Android进阶之旅------>Android之动画之Frame Animation实例 中展示的是Frame动画效果,但是之前我是将图片截取下来,不好说明确切的动画过程 ...

  8. 第二节,CCSpriteBatchNode CCSpriteFrameCache

    1,CCSpriteBatchNode 精灵集合类 其中Batch的英文含义是一批,一群的意思.他的对象常常包含了许多的精灵对象,这些精灵对象有一个共同的特点,那就是使用同一张文理图片.虽然是同一个纹 ...

  9. [Angular 2] Mapping Streams to Values to Affect State

    While you have multiple streams flowing into your scan operator, you'll need to map each stream to t ...

  10. Json序列反序列类型处理帮助类

    Json序列反序列类型处理帮助类. JSON反序列化 JSON序列化 将Json序列化的时间由/Date(1294499956278+0800)转为字符串 将时间字符串转为Json时间 using S ...