基于网页的认证跳转实现

基于网页的认证跳转实现

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

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

相关推荐

  • webstorm激活码(注册激活)

    (webstorm激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
  • linux命令启动MySQL

    linux命令启动MySQL====================================可使用如下命令启动MySQL:servicemysqldstart或者使用如下命令:/etc/init.d/mysqldstart可使用如下命令重新启动MySQL:servicemysqldrestart或者使用如下命令:/etc/init.d/mysqldrestart====…

    2022年5月11日
  • 深圳易速马网络科技有限公司_动易网络

    深圳易速马网络科技有限公司_动易网络纵观现如今国内CMS程序,大有百花争艳的感觉,随着企业建站需求的复杂度和功能的不断扩展,传统的三五个人写一段代码即告网站建已经行不通,于是以内容管理为应用核心的CMS产品大行其道。  这些CMS系统大体上基于两套框架编写:PHP+MySQL和.NET+MSSQL。在PHP中比较有名的就有DeDeCMS、PHP168、帝国CMS、Supesite等,在.NET方面就有zoomla!CMS、

    2022年9月30日
  • Python搭建代理IP池(一)- 获取 IP[通俗易懂]

    Python搭建代理IP池(一)- 获取 IP[通俗易懂]使用爬虫时,大部分网站都有一定的反爬措施,有些网站会限制每个IP的访问速度或访问次数,超出了它的限制你的IP就会被封掉。对于访问速度的处理比较简单,只要间隔一段时间爬取一次就行了,避免频繁访问;而对于访问次数,就需要使用代理IP来帮忙了,使用多个代理IP轮换着去访问目标网址可以有效地解决问题。目前网上有很多的代理服务网站可以提供代理服务,也提供一些免费的代理,但可用性较差,如果需…

    2022年6月5日
  • Zato入门part2

    Zato入门part2

    2022年3月12日
  • python之for循环详解_python循环5次

    python之for循环详解_python循环5次目录1、可以明确循环的次数2、iteratle_object(可迭代对象)3、enumerate()使用方法为4、补充:统计文件行数可以这样写:1、可以明确循环的次数遍历一个数据集内的成员 在列表解析中使用 生成器表达式中使用2、iteratle_object(可迭代对象)String(字符串) List(列表) Tuple(元组) Dictionary…

    2022年8月12日

发表回复

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

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