基于网页的认证跳转实现

基于网页的认证跳转实现

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

第一步:在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)
上一篇 2022年3月13日 上午10:00
下一篇 2022年3月13日 上午10:00


相关推荐

  • 羞,Java 字符串拼接竟然有这么多姿势

    羞,Java 字符串拼接竟然有这么多姿势二哥 我今年大二 看你分享的 阿里巴巴 Java 开发手册 上有一段内容说 循环体内 拼接字符串最好使用 StringBuilde 的 append 方法 而不是 号操作符 到底为什么啊 我平常一直就用的 号操作符啊 二哥有空的时候能否写一篇文章分析一下呢 就在昨天 一位叫小菜的读者微信我说了上面这段话 我当时看到这条微信的第一感觉是 小菜你也太菜了吧 这都不知道为啥啊 我估

    2026年3月19日
    2
  • IMSI、IMEI和MEID(ESN)

    IMSI、IMEI和MEID(ESN)ESN ElectronicSe 电子序列号 在 CDMA 系统中 是鉴别一个物理硬件设备唯一的标识 也就是说每个手机都用这个唯一的 ID 来鉴别自己 就跟人的身份证一样 一个 ESN 有 32bits 也就是 32 8 4bytes 随着 CDMA 移动设别的增多 ESN 已经不够用了 所以推出了位数更多的 MEID ESN 用 8 位的 16 进制来表示 如 0x801EA066

    2026年3月26日
    1
  • windows程序设计之定义窗口句柄

    windows程序设计之定义窗口句柄HWNDhwnd 什么叫做句柄呢 句柄最原始的定义为 typedefvoid HANDLE 就是一个指针 在 32 位 windows 中占用 4 个字节 它指向内存的大小由它的类型决定 函数用句柄来传递数据 句柄在 winnt h 中是这么定义的 ifdefSTRICTt HANDLE 这就是 HANDLE 的定义 define

    2026年3月18日
    3
  • 2020年北京理工大学计算机学硕跨考上岸经验分享「建议收藏」

    2020年北京理工大学计算机学硕跨考上岸经验分享「建议收藏」前言5月20号出了录取名单,终于结束了考研生涯。记录下二年的考研历程和心路历程给自己最后一个圆满的结束,内容可能有些啰嗦。一战北航学硕本科就读于北京某211高校能动专业,只学习过C语言。大约9月份开始正式准备考研,当时头铁,看了下北京计算机实力较强的高校,第一梯队是清华北大,不用想,直接放弃。第二梯队北航、北理。身边的同学都保研或考研去北航,遂选择北航。一战结果:总分300+,数学110+,政治英语好像都是60+,最惨的是专业课60,直接没过复试线。卒~~~数学数学跟的是张宇,初期买了一本高数十八

    2022年6月14日
    55
  • 卡商卡盟在线批发平台_卡盟总控源码

    卡商卡盟在线批发平台_卡盟总控源码源码介绍:该源码对接宝塔API实现秒搭建主站功能,包括分站开通等都无需人工操作源码价值:****.**¥我也不知道值多少钱,反正修了很久才对接好宝塔接口跟各种问题,搞了好多天,时间长达3个月,不过不是连续修2个月,反正开始搞到现在搞了3个月多吧没有接好支付通道,想要运营的可以找我对接或者找别人对接安装说明服务器系统:Linux+Centos7.x+宝塔亲测环境:Nginx1.1…

    2022年8月12日
    5
  • 微信公众号服务器搭建

    微信公众号服务器搭建https blog csdn net wsadzxcleg article details

    2026年3月20日
    2

发表回复

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

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