端口扫描技术_端口扫描nodejs

hacker|
174

使用 NodeJs 实现本地接口系统

一个基于node.js的轻量级 API mock服务 。

 

在存放mock数据的文件夹下执行命令启动服务。

如果mock数据文件放在名为 mock-data 的文件夹下,则在 mock-data 文件夹下执行以下命令。

以下命令默认端口为 7777

或者使用自定义端口

服务启动后,访问地址为

在存放mock数据的目录下新建 .json 或者 .js 为后辍的文件。

mock规则示例如下:

如果对同一接口分别创建了 js 和 json 两个mock文件,会优先取 js文件 的数据。

mock文件名必须和API接口的文件名一致,才能将API和mock文件匹配。

示例:

示例:

1) 先安装包

2) 在任意位置新建一个文件夹 mock-test

3) 在 mock-test 目录下新建mock数据文件 test.json ,并添加内容如下:

4) 在 mock-test 目录下面执行命令启动mock服务 (默认端口7777)

5) 打开浏览器,输入以下地址,访问mock文件

请求地址只要以 test 结尾的,都可以访问到上面创建的 test.json 文件

6) 项目中使用

以webpack4为例:

Github仓库源码地址: ,欢迎 +Star

nodejs进程端口号是多少

var cmd=process.platform=='win32'?'netstat -ano':'ps aux';

var exec = require('child_process').exec;

var qqname='qq';

var port='3392';

exec(cmd, function(err, stdout, stderr) {

    if(err){ return console.log(err); }

    

    stdout.split('\n').filter(function(line){        

        var p=line.trim().split(/\s+/); 

        var address=p[1];        

        if(address!=undefined){        

            if(address.split(':')[1]==port)

            {                

                exec('taskkill /F /pid '+p[4],function(err, stdout, stderr){

                    if(err){

                        return console.log('释放指定端口失败!!');    

                    }

                    

                    console.log('占用指定端口的程序被成功杀掉!');

                });

            }

        }                          

    });

});

Nodejs的WebSocket模块怎么设置连接超时时间

在建立socket连接时可以很容易设置socket通信的发送和接收超时时间,但是在建立socket通信时,如果是Win98系统,则如果连接失败,则程序会一直等待在哪里,Windows2000默认超时时间是30秒,当然,这个超时时间不算长,但是加入我们要循环扫描一系列端口并且建立连接的话,总的等待时间就会让人忍受不了,下面就以delphi为例进行说明,如何在建立socket的时候设置其超时时间:

//连接,发送和接收时间都设为2秒

SctTimeOut := 2000;

//设置接收数据通信超时

setsockopt(hSock,SOL_SOCKET,SO_RCVTIMEO,@SctTimeOut,SizeOf(Integer));

//设置发送数据通信超时

setsockopt(hSock,SOL_SOCKET,SO_SNDTIMEO,@SctTimeOut,SizeOf(Integer));

//首先,设置通讯为非阻塞模式

dwArg := 1;

RecvLen := ioctlsocket(hSock,FIONBIO,dwArg);

//其次,连接服务器

ZeroMemory(@addr, sizeof(addr));

addr.sin_family := AF_INET;

addr.sin_addr.S_addr := inet_addr(pchar(SvrIP));

addr.sin_port := htons(Strtoint(SvrPort));

RecvLen := 0;

RecvLen := connect(hSock, addr, sizeof(addr));

//再次,设置连接超时时间为2秒

tmOut.tv_sec := 2;

tmOut.tv_usec := 0;

FD_ZERO(recvSet);

FD_SET(hSock, recvSet);

RecvLen := select(0, @recvSet, @recvSet, nil, @tmOut);

//连接失败,报错误信息

if (RecvLen = 0) or (RecvLen = SOCKET_ERROR) then

begin

ErrMsg := '连接服务器失败!';

exit;

end;

//最后,设置通讯为阻塞模式

dwArg := 0;

RecvLen := ioctlsocket(hSock,FIONBIO,dwArg);

//end modify

nodejs如何检查哪个IP访问80端口

由于linux的系统限制,普通用户是无法打开1024以下端口的,这里面就包括http的默认端口80,这就使得很多用户使用root权限来执行node,这带来了不可预计的安全问题,所以这并不是一个好办法。

其实我们可以使用iptables的端口转发功能来解决这个问题:

1,首先将node的主程序绑定到高于1024端口,比如8090,这样普通用户就可以启动这个http server了,只不过不是在默认的80端口上监听;

2,配置iptables将80端口转发到8090上,如下命令:

#iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8090

该命令的意思就是在iptable中添加一条端口转发规则,如果删除该规则,重新绑定,则先查找出:

#iptables --line-numbers --list PREROUTING -t nat

然后使用行号删除:

#iptables -t nat -D PREROUTING 行号

3,记得添加8090端口到iptables的INPUT ACCEPT规则中

#iptables -I INPUT -p tcp --dport 8090 -j ACCEPT

4,第2步和第3步添加的这些规则,都是临时性的,重启服务器之后就无效了,所以需要保存起来

#/sbin/service iptables save

端口转发配置完成

————————————————

版权声明:本文为CSDN博主「newborn2012」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

nodejs内置模块有哪些

一、Express框架

前面的章节已经介绍过了,可以使用npm来安装node.js模块。具体操作请参照以前写的nodejs概论。

Express是一个nodejs的web开源框架,用于快速的搭建web项目。其主要集成了web的http服务器的创建、静态文本管理、服务器URL地址请求处理、get和post请求处理分发、session处理等功能。

使用方法,在cmd中打开你所想创建web项目的路径。然后输入

Express appname

即可创建一个名为appname的web项目。控制台打印结果

在cmd中进入appname文件夹输入

node appname.js

返回结果如下图,表示安装成功!

在项目开发中经常会出现这样的问题

此错误表示没有安装相关模块,解决办法是在cmd上打开项目文件夹,输入

npm install express

安装成功后会在本文件路径下生成一个node_modules,里面包含了Express框架代码。

其他模块也可用类似的方法进行安装,安装后的路径同样是在node_modules下。

二、jade模块

jade是一款高性能、简洁易懂的模板引擎。可通过jade来编写html文件。

jade类似一个用于快速编写html的语言,其编写后的文件后缀为.jade。

以下为文件的内容

在cmd中输入,压缩的过的可以通过加-P来不压缩,如果每次更改模版都要打命令行一次很麻烦是不是,我们可以通过加上jade -P -w jade.jade  加上一个-w来开启监视模式,每次更改模版,html文件都会自动编译咯

生成后的html文件如下:

在jada文件中是可以使用for循环和if判断语句的,可以让你体会类似JSP的%%和php的php/php在网页上输出数据的快感。

三、forever模块

nodejs作为http服务器,需要确保服务顺利进行,要注意一下两点:

1.后台服务运行,监控运行日志,以及http运行日志;

2.确保项目的正常安全运行,Node.js的启动命令node,很大程度无法满足运行需求;

Node.js的forever模块在第二点就可以起到很大的作用,同时其拥有监控文件更改、自动重启等功能。

forever模块的使用方法有两种:1.在命令行中使用

forever -l forever.log -o out.log -e err.log app.js

-l forever.log -o out.log -e err.log分别指定了forever的运行日志,脚本流水日志,脚本运行错误日志,启动后将在本文件夹下产生out.log、err.log文件。

2.在编码中require forever模块使用。

四、Socket.IO模块

Socket.IO模块主要功能是将WebSocket协议应用到所有浏览器。主要用于实时的长连接多求情项目中。

例如:在线联网游戏,实时聊天、实时股票查看、二维码扫描登录等。

安装方法仍然是在cmd在中输入npm install socket.io

如何使用Socket.IO来创建一个项目。

需要分别实现服务端和客户端的逻辑:

先创建一个服务端的node.js脚本index_server.js

var app = require('http').createServer(handler)//创建服务器app

, io = require('socket.io').listen(app)//引用socket.io模块监听app

, fs = require('fs')//引用文件处理模块

app.listen(80);//指定app监听的端口,第二个参数127.0.0.1可省略

function handler (req, res) {

fs.readFile(__dirname + '/index.html',   function (err, data) {     if (err) {

res.writeHead(500);       return res.end('Error loading index.html');

}

res.writeHead(200);

res.end(data);

});

}

io.sockets.on('connection', function (socket) {

socket.emit('news', { hello: 'world' });

socket.on('my other event', function (data) {

console.log(data);

});

});

其中,socket.emit()为Socket发送消息的函数,第一个参数表示发送消息的key值,第二个参数为发送消息的内容,也就是发送的数据。

Socket。on()为Socket接收消息的函数,第一个参数为接收消息的可以值,第二个参数为回调函数,其中回调函数携带的参数为接收消息所发送的数据。

接下来web前端如何使用JavaScrit 来连接Socket服务器。

新建一个index_client.html

script type="text/javascript" src="socket.js"/script

script type="text/javascript"    var socket = io.connect('');//创建本地sock连接

socket.on('news',function (data) {//Socket接收news消息时执行回调函数        console.log(data);

socket.emit('my other event',{my:'data'});

});/script

script type="text/javascript" src="socket.js"/script加载已经安装好的Socket.io的本地JavaScrit文件。

var socket = io.connect('');因为端口为80,所有这里可以不端口号

socket.on('news',function (data){}//客户端接收news消息成功后,发送my other event消息到服务端,发送的消息内容为json对象{my:'data'}

接下来只需要运行服务端的index_server.js文件来启动socket服务

效果:在浏览器输入按F12调出浏览器的控制台console即可看见打印出了一个object对象。

执行完毕后可能会报错:catnot find module socket.io,说明你的socket.IO没有安装,或已经安装并配置为全局,但你的安装路径并没有配置到在path中,所有无法引用。

你可以选择配置path,或者安装到项目内。这里建议安装到你的项目目录下,而不是简单粗暴的配置为全局。先卸载npm uninstall socket.io 进入指定目录后安装node index_server.js

socket.io详细请参阅    

五、request模块

request模块为开发者提供了一种简单访问HTTP请求的方法。request还支持HTTPS的访问方法。

安装:

npm install requset

request模块基本上覆盖了所有的HTTP请求方式如GET,POST,HEAD,DEL等。但其最基本的两个方法是request.get()和request.post().

get和post的区别

get:

1.使用get向服务器发出和接收的请求会附在url之后。类似:?id=1221name=5555这个url中传递了两个参数,一个为id,一个为name。

2.get请求不能超过1024个字节。

post没有限制,也不会附在url上。

接下来做一个简单的实例

get实例:

首先新建一个服务器app_get.js

var http= require("http");

http.createServer(function(req,res){

res.writeHead(200,{'content-Type':'text/plain'});

res.end('Hello world\n'+req.method);

}).listen(1337,"127.0.0.1");

再建一个发送求情的request_get.js文件

var request=require('request');

request.get("",function(error,response,result){

console.log(result);

});

在CMD中运行app_get.js,运行成功后,再打开一个cmd(之前的cmd不要关闭),执行request_get.js文件。

执行后的结果如下

hello world

GET

可以看出,通过request.get方法访问

返回的结果就是res.end()的参数

post实例:

和上面一样,先新建服务器app_post.js

var http= require("http"),

querystring=require('querystring');

http.createServer(function(req,res){    var postData="";    //开始异步接收客户端post的数据

req.addListener("data",function (postDataChunk) {

postData += postDataChunk;

});    //异步post数据接收完毕后执行匿名回调函数

req.addListener("end",function(){        var postStr=JSON.stringify(querystring.parse(postData));

res.writeHead(200,{'content-Type':'text/plain'});

res.end(postStr+'\n'+req.method);

});

}).listen(1400,"127.0.0.1");

然后再新建一个request_post.js

var request=require("request");

request.post('',{form:{'name':'ermu','book':'node.js'}},function (error,response,result) {

console.log(result);

})

像上面一样在cmd中执行后显示的结果如下:

D:\nodejs\src\requestnode request_post.js

{"name":"ermu","book":"node.js"}

POST

request post提交了一个json对象{"name":"ermu","book":"node.js"}而服务器接通过获取该POST数据,然后返回客户端,同时将http请求方式也响应到客户端。

request post参数可以有两种传递方式。

其中,第一种是将url和form表单的数据作为json参数在request post传递。举例如下:

request.post('url':'',form:{'name':'ermu','book':'node.js'}},function (error,response,result) {

console.log(result);

})

另一种是将url和form作为两个参数,上面的实例就是使用这种方法。

六、  Formidable模块

该模块的目的是为了解决文件上传。

在原生的node.js模块中,提供了获取post数据的方法,但是并没有直接获取上传文件。

如何检测nodejs的socket

用Socket实现的一个端口测试程序

var net = require('net'),socket = net.Socket;/*

测试端口

*/

var testPort = function(port,host,cb){ var nsk = new socket();

nsk.setTimeout(5000);//设置连接超时时间  5s

nsk.on('connect',function(){//连接状态

nsk.destroy();//销毁

cb(port,'open');

})

.on('timeout',function(){//连接超时

nsk.destroy();

cb(port,'timeout');

})

.on('error',function(){//连接错误

nsk.destroy();

cb(port,'closed');

});

nsk.connect(port,host);//执行连接

};

0条大神的评论

发表评论