基于网页的认证跳转实现


第一步:在Web服务器上加一条跳转命令,将所有客户端浏览器80端口的所有请求都跳转到web服务器首页,命令如下:

           iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.6.1:80  (root权限执行)

          这条命令将客户端80端口的请求都跳转到web服务器地址(192.168.6.1:80  具体根据自己web服务器的ip和端口)

         另外,将指定ip跳转到指定地址的命令如下:

          iptables -t nat -A PREROUTING  -s 192.168.6.102 -p tcp --dport 80 -j DNAT --to 192.168.6.1:80  (root权限执行)

          上面这条命令就相当于将ip为192.168.6.102的客户端跳转到服务器地址首页

第二步:通过网页接口将客户端ip放行

          客户端打开浏览器应该会被重定向到我们的web首页,这个时候点击网页首页上的一个按钮,将客户端ip传到服务器端,服务器接收到ip后执行放行命令,如下:

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

       router.get('/random', function(req, res, next){
              var ip = req.ip.substring(7, req.ip.length);
              exec('iptables -t nat -I PREROUTING 1 -s '+ip+' -j ACCEPT');
              exec('iptables -t nat -I PREROUTING 1 -s '+ip+' -j RETURN');
              log('jump', req.ip, 'surfing the internet');
        
              res.success("ready to the internet!");
              res.redirect('back');
         });

       当然,我这儿是用的nodejs框架,重要看两个部分:

       1.   iptables -t nat -I PREROUTING 1 -s '+ip+' -j ACCEPT  这条命令会将客户端地址为ip的放行,相当于通过了认证,执行完这条命令后这个ip的客户端就可以正常上网了

             当然,删除命令:iptables -t nat -D PREROUTING '+ip+' -j ACCEPT

       2.   nodejs执行脚本的接口exec,  这里通过var exec = require('child_process').exec;  创建了一个子进程,然后就可以很方便地调用shell脚本了,十分方便。

        这里顺便介绍一下nodejs子进程:

NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有:

标准输入、标准输出及标准错误输出的接口
child.stdin 获取标准输入
child.stdout 获取标准输出
child.stderr 获取标准错误输出
获取子进程的PID:child.pid
提供生成子进程的重要方法:child_process.spawn(cmd, args=[], [options])
提供直接执行系统命令的重要方法:child_process.exec(cmd, [options], callback)
提供杀死进程的方法:child.kill(signal='SIGTERM')


实例一:利用子进程获取系统内存使用情况

创建文件test1.js 写入如下代码:

var spawn = require('child_process').spawn,
free = spawn('free', ['-m']);

// 捕获标准输出并将其打印到控制台
free.stdout.on('data', function (data) {
console.log('标准输出:\n' + data);
});

// 捕获标准错误输出并将其打印到控制台
free.stderr.on('data', function (data) {
console.log('标准错误输出:\n' + data);
});

// 注册子进程关闭事件
free.on('exit', function (code, signal) {
console.log('子进程已退出,代码:' + code);
});


保存后执行文件

$ node test1.js
标准输出:
total used free shared buffers cached
Mem: 3949 1974 1974 0 135 959
-/+ buffers/cache: 879 3070
Swap: 3905 0 3905

子进程已退出,代码:0
以上输出相当与在命令行执行:free -m 命令。


实例一:利用子进程统计登陆次数

创建文件test2.js 写入如下代码:

var exec = require('child_process').exec,
last = exec('last | wc -l');

last.stdout.on('data', function (data) {
console.log('标准输出:' + data);
});

last.on('exit', function (code) {
console.log('子进程已关闭,代码:' + code);
});

保存后执行文件

$ node test2.js
标准输出:203

子进程已关闭,代码:0
其与直接在命令行输入:last | wc -l 的结果是一样的。

具体可以参看文章:http://www.jb51.net/article/37951.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值