基于网页的认证跳转实现

基于网页的认证跳转实现

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

第一步:在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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 简单常用滤波算法C语言实现「建议收藏」

    简单常用滤波算法C语言实现「建议收藏」1.限幅滤波算法(程序判断滤波算法)方法解析:根据经验判断,确定两次采样允许的最大偏差值(设定为A),每次检测到新值时判断:如果本次值与上次值之差如果本次值与上次值只差>A,则本次值无效,放弃本次值,用上次值代替本次值。优点:能有效克服因偶然因素引起的脉冲干扰缺点:无法抑制那种周期性的干扰,平滑度差#defineA10charvalue;charfi

    2022年5月28日
    46
  • jar中没有主清单属性啥意思啊_java命令运行jar找不到主类

    jar中没有主清单属性啥意思啊_java命令运行jar找不到主类1.首先我是用Maven导出到包,得到的jar文件保存在2.在这个文件目录下cmd运行,java-jarcsdn-1.0-SNAPSHOT.jar这句命令提示出现”jar中没有主清单属性”3.解决方法;用压缩包的方式打开jar文件autoUp.class这个是我编译之后得到的class文件main函数在这个里面打开META-INF文件夹,看到MANIFEST.MF文件以记事本的方式打开我的里面一开始是这个样子再里面添加一句代码Main-Class:autoUp

    2022年9月5日
    3
  • 增强for循环的语法_增强for循环原理

    增强for循环的语法_增强for循环原理一、概述:也成为【foreach】循环,是JDK1.5版本以后出来的一个高级for循环,专门用来遍历数组和集合的,它的内部原理其实就是iterator迭代器,所以在遍历过程中,不能对集合的元素进行增删操作。二、格式for(元素的数据类型变量名:数组名/集合名{}三、代码演示publicstaticvoidmain(String[]args)…

    2025年7月10日
    0
  • 记arduino编译故障问题

    记arduino编译故障问题

    2021年5月18日
    111
  • 使用 Chrome Timeline 来优化页面性能

    使用 Chrome Timeline 来优化页面性能

    2021年9月17日
    45
  • qmake自定义函数「建议收藏」

    qmake自定义函数「建议收藏」使用qmake编写构建步骤时,如果较为复杂或重复的行为可以使用函数来实现。

    2022年5月12日
    49

发表回复

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

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