logsController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. class logsController extends Controller
  3. {
  4. public $initphp_list = array(
  5. 'rsync',
  6. 'test'
  7. );
  8. public function run()
  9. {
  10. $preg = "/\d+\.\d+\.\d+\.\d+/";
  11. $s = $this->controller->get_gp("s");
  12. preg_match($preg, $s, $ip);
  13. $port = $this->controller->get_gp("port");
  14. writeLog($ip[0], $port);
  15. $ip_lib = self::getIp();
  16. $server_ip = $ip_lib->getIp();
  17. $logs = $this->getLogsDao();
  18. $data['ip'] = $ip[0];
  19. $data['port'] = $port;
  20. $location = $ip_lib->get_area($ip[0]);
  21. $ssh = $this->getSshServeice();
  22. $servers = $ssh->getAll();
  23. $_servers = array();
  24. foreach ($servers as $k => $v) {
  25. $_servers[] = $v['server'];
  26. }
  27. if ($r = $logs->getOneByField($data)) {
  28. $logs->update($r['id'], array(
  29. 'time' => date("Y-m-d H:i:s"),
  30. 'server_ip' => $server_ip,
  31. 'location' => $location
  32. ));
  33. echo "OK";
  34. } else {
  35. $data['server_ip'] = $server_ip;
  36. $data['time'] = date("Y-m-d H:i:s");
  37. $data['location'] = $location;
  38. $logs->add($data);
  39. }
  40. die();
  41. if (! $ip_lib->inChina($location) && ! in_array($ip[0], $_servers)) { // 非中国大陆IP,冻结账户,发邮件通知
  42. $user = $this->getUserService();
  43. $userinfo = $user->getUserByPort($port);
  44. if($userinfo['switch']==0){
  45. echo "has disabled!";
  46. die();
  47. }
  48. $user->delUser($userinfo['uid']);
  49. $subject = $userinfo['user_name'] . ':您在shadowsocks5上的账号出现异常登录被冻结!';
  50. $message = "<html>
  51. <head>
  52. <title>欢迎使用ShadowSocks服务</title>
  53. </head>
  54. <body>
  55. <p>尊敬的ss5用户:" . $userinfo['user_name'] . "</p>
  56. <table>
  57. <tr>
  58. 您在 <a href='https://www.shadowsocks5.com'>https://www.shadowsocks5.com</a> 上的账号由于在海外IP(" . $ip[0] . ":" . $location . ")上使用ss服务已经被冻结,
  59. <br>如果属于误连接,您可以登录网站后按照网站提示进行解除冻结操作,在冻结解除之前您将无法继续使用ss5提供的shadowsocks服务,如果多次发生此类情况,您的账户将被永久冻结,感谢您的支持与理解!
  60. <br><font color='red'>本邮件由系统自动发送,请不要直接回复本邮件,如有问题请发送邮件到heanup@vip.qq.com</font>
  61. </tr>
  62. </table>
  63. </body>
  64. </html>";
  65. $headers = "MIME-Version: 1.0" . "\r\n";
  66. $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
  67. // 更多报头
  68. $headers .= 'From: <webmaster@shadowsocks5.com>' . "\r\n";
  69. $headers .= 'Cc: shadowsocks5@foxmail.com' . "\r\n";
  70. mail($userinfo['email'], $subject, $message, $headers);
  71. }
  72. }
  73. public function rsync()
  74. {
  75. set_time_limit(0);
  76. $logs = $this->getLogsDao();
  77. $data = $logs->getAll();
  78. $ip_lib = self::getIp();
  79. foreach ($data as $k => $v) {
  80. if (trim($v['location']) != "") {
  81. continue;
  82. }
  83. $temp = array();
  84. $temp['location'] = $ip_lib->get_area($v['ip']);
  85. if (trim($temp['location']) != "")
  86. $logs->update($v['id'], $temp);
  87. }
  88. echo "OK";
  89. }
  90. public function test()
  91. {
  92. $ip = "163.44.170.225";
  93. $ssh = $this->getSshServeice();
  94. $servers = $ssh->getAll();
  95. $_servers = array();
  96. foreach ($servers as $k => $v) {
  97. $_servers[] = $v['server'];
  98. }
  99. $ip_lib = self::getIp();
  100. $location = "北美地区";
  101. if (! $ip_lib->inChina($location) && ! in_array($ip, $_servers)) {
  102. echo "国外";
  103. } else {
  104. echo "国内";
  105. }
  106. }
  107. /**
  108. *
  109. * @return logsDao
  110. */
  111. private function getLogsDao()
  112. {
  113. return InitPHP::getDao("logs");
  114. }
  115. /**
  116. *
  117. * @return userService
  118. */
  119. private function getUserService()
  120. {
  121. return InitPHP::getService("user");
  122. }
  123. /**
  124. *
  125. * @return areacodeInit
  126. */
  127. private function getIp()
  128. {
  129. return InitPHP::getLibrarys("areacode");
  130. }
  131. /**
  132. *
  133. * @return sshInit
  134. */
  135. private function getssh()
  136. {
  137. return InitPHP::getLibrarys("ssh");
  138. }
  139. /**
  140. *
  141. * @return sshDao
  142. */
  143. private function getSshServeice()
  144. {
  145. return InitPHP::getDao("ssh");
  146. }
  147. }