基于网页的认证跳转实现

基于网页的认证跳转实现

大家好,又见面了,我是全栈君。

第一步:在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

转载于:https://my.oschina.net/u/2935389/blog/1620318

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107711.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 对象为空判断_java中判断对象是否为空的方法

    java 对象为空判断_java中判断对象是否为空的方法判断Java对象是否为null的方法:首先,直接使用object==null去判断,对象为null的时候返回true,不为null的时候返回false。然后,在object!=null为true的情况下,进一步去判断对象的所有属性是否为null。实例:packagecom.gj5u.publics.util;importjava.util.List;/***判断对象是否为空**…

    2022年5月2日
    261
  • 基于canal的client-adapter数据同步必读指南

    基于canal的client-adapter数据同步必读指南

    2020年11月19日
    210
  • python 程序员进阶之路:从新手到高手的100个模块

    在知乎和CSDN的圈子里,经常看到、听到一些python初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python学到什么程度可以面试工作?》,真实反映了python程序员在成长过程中的一些困惑。

    2022年4月10日
    53
  • 云服务器怎么设置成代理服务器?

    云服务器怎么设置成代理服务器?我的云服务器本来是作为Web服务器用的。但是现在有个问题我们财务的软件,数据在联通的服务器上存放着,而我们单位的网络是移动的网络,两个连起来费劲的很,也就是软件使用起来费劲的很。我想通过云服务器中转,因为我们上云服务器速度挺快,云服务器上联通的应该也挺快的。高手知道怎么搞嘛?就像网上很多http、socks代理一样,把我的服务器变…

    2022年6月22日
    72
  • Java 认证考试 OCAJP 经验总结

    Java 认证考试 OCAJP 经验总结1. 考证、认证是否有用含金量的话题关于认证考试(无论什么认证)是否有用?这个话题无论是在哪里都有人问。这个问题就好比上大学是否有用吗一样,有的人没上过大学一样年薪百万。认证这种东西需要的时候即有用,不需要的时候就没用。有,并没有什么坏处。说实话个人感觉这证件没什么大用。而自己想考的理由完全是想自我check下,逼自己复习学习基础。如果你是刚毕业的GH或者在校的,手里有些零花钱的可以考虑下,…

    2022年7月8日
    28
  • mysql-front 下载安装

    mysql-front 下载安装mysql-front 下载安装

    2022年4月24日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号