写在前面:
作者最近这几天写了一个shell脚本准备进行出售,由于单独出售利润不大,决定将脚本按照IP进行授权,出售授权,这样可以增加利润。
授权原理:
客户端运行shell脚本时,首先会利用curl从服务器获取两个数据,进行比对,如果两个数据相同,则表明此IP没有被授权,否则则授权成功。
这里说下为什么要这样写呢,其实起初我也想过很多方案,但后来都被我否决,主要原因就是有偶然性。在某种情况下(比如断网)会触发一些意外结果。而此方案当断网是返回的应该是相同值,间接避免了bug的产生。
服务端(验证端的编写)
原理:服务端利用php编写,共有两个文件.
shell.php
授权核心代码,客户端访问时程序会对客户端IP进行判断,如果该IP存在数据库中,则返回此IP位于数据库第几行,不存在则返回客户端IP
代码如下:
<?php //此函数用于获取IP function get_real_ip(){ $ip =false; if (! empty ( $_SERVER [ "HTTP_CLIENT_IP" ])){ $ip = $_SERVER [ "HTTP_CLIENT_IP" ]; } if (! empty ( $_SERVER [ 'HTTP_X_FORWARDED_FOR' ])) { $ips = explode ( ", " , $_SERVER [ 'HTTP_X_FORWARDED_FOR' ]); if ( $ip ) { array_unshift ( $ips , $ip ); $ip = FALSE; } for ( $i = 0; $i < count ( $ips ); $i ++) { if (! eregi ( "^(10|172\.16|192\.168)\." , $ips [ $i ])) { $ip = $ips [ $i ]; break ; } } } return ( $ip ? $ip : $_SERVER [ 'REMOTE_ADDR' ]); } //定义一个IP变量 $ipc =get_real_ip(); //连接MYSQL查询 $con = mysql_connect( "localhost" , "root" , "root" ); if (! $con ) { die ( 'Could not connect: ' . mysql_error()); } mysql_select_db( "test" , $con ); //获取结果 $result = mysql_query( "SELECT `ID`, `IP` FROM `shell_users` WHERE IP='$ipc' limit 1;" , $con ); //如果有记录则输出记录在数据库中的行数并退出 while ( $row = mysql_fetch_array( $result )) { echo $row [ 'ID' ]; mysql_close( $con ); exit ; } //无记录直接显示IP echo "$ipc" ; mysql_close( $con ); ?> |
getip.php
没卵用,仅仅提供客户端IP与shell.php返回的数值进行比对.
代码如下:
<?php function get_real_ip(){ $ip =false; if (! empty ( $_SERVER [ "HTTP_CLIENT_IP" ])){ $ip = $_SERVER [ "HTTP_CLIENT_IP" ]; } if (! empty ( $_SERVER [ 'HTTP_X_FORWARDED_FOR' ])) { $ips = explode ( ", " , $_SERVER [ 'HTTP_X_FORWARDED_FOR' ]); if ( $ip ) { array_unshift ( $ips , $ip ); $ip = FALSE; } for ( $i = 0; $i < count ( $ips ); $i ++) { if (! eregi ( "^(10|172\.16|192\.168)\." , $ips [ $i ])) { $ip = $ips [ $i ]; break ; } } } return ( $ip ? $ip : $_SERVER [ 'REMOTE_ADDR' ]); } $ipc =get_real_ip(); echo $ipc ; ?> |
(由于本人只了解过PHP,所以代码写的有点乱,谅解下)同时获取IP函数来自网络
客户端的编写:
#!/bin/bash echo "Loading... please wait..." #安装curl yum -y install curl > /dev/null #通过curl获取授权 这边说下curl的-x是用来指定IP,防止用户改hosts文件屏蔽网址 (具体有啥用我也不知道,反正能用就行) IP=$(curl http: //127 .0.0.1 /getip .php -x127.0.0.1:80) ID=$(curl http: //127 .0.0.1 /shell .php -x127.0.0.1:80) #输出IP echo "Your IP Is:$IP" #进行判断 if [[ $ID == $IP ]]; then echo "IP未授权" exit else echo "你的IP正确" fi |
由于shell脚本可以直接打开
所以这里使用shc加密
shc的使用具体可以看我博文
这样弄完之后就可以给用户使用了。