3morfg

Untitled

Jun 24th, 2022 (edited)
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 7.58 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Socket;
  5. use Digest::MD5 qw(md5_hex);
  6. use Net::Whois::Raw;
  7. use Geo::IP;
  8.  
  9. #IP・リモホ・UAを取得
  10. my $ip_addr = "$ENV{'REMOTE_ADDR'}";
  11. my $remoho  = gethostbyaddr(inet_aton($ip_addr), AF_INET);
  12. my $ua = "$ENV{'HTTP_USER_AGENT'}";
  13.  
  14. #bbs_slipに使用する文字
  15. my @slip_char = (0..9, "a".."z", "A".."Z", ".", "/");
  16. #slip_ip生成
  17. $ip_addr =~ /^(\d{1,4})\.(\d{1,4})/;
  18. my $ip_char1 = $slip_char[$1 % 64];
  19. my $ip_char2 = $slip_char[$2 % 64];
  20. my $slip_ip = $ip_char1 . $ip_char2;
  21. #slip_remoho生成
  22. $remoho =~ /([a-zA-Z][a-zA-Z-\.]+$)/;
  23. my $remoho_name = $1;
  24. my $remoho_dig = md5_hex($remoho_name);
  25. $remoho_dig =~ /^(.{2})(.{2})/;
  26. my $remoho_char1 = $slip_char[hex($1) % 64];
  27. my $remoho_char2 = $slip_char[hex($2) % 64];
  28. my $slip_remoho = $remoho_char1 . $remoho_char2;
  29. #slip_ua生成
  30. my $ua_dig = md5_hex($ua);
  31. $ua_dig =~ /^(.{2})(.{2})(.{2})(.{2})/;
  32. my $ua_char1 = $slip_char[hex($1) % 64];
  33. my $ua_char2 = $slip_char[hex($2) % 64];
  34. my $ua_char3 = $slip_char[hex($3) % 64];
  35. my $ua_char4 = $slip_char[hex($4) % 64];
  36. my $slip_ua = $ua_char1 . $ua_char2 . $ua_char3 . $ua_char4;
  37.  
  38. #bbs_slipの初期設定
  39. my $slip_id = "";
  40. my $slip_nickname = "ワッチョイ";
  41. my $slip_aa = $slip_ip;
  42. my $slip_bb = $slip_remoho;
  43. my $slip_cccc = $slip_ua;
  44.  
  45. #モバイル回線判定用のリモホ・事業者名・IP
  46. my @mobile_lines_remoho = (
  47.   ".*\\.openmobile\\.ne\\.jp",
  48.   ".*\\.panda-world\\.ne\\.jp",
  49.   "KD027.*\\.au-net\\.ne\\.jp",
  50.   "KD036.*\\.au-net\\.ne\\.jp",
  51.   "KD106.*\\.au-net\\.ne\\.jp",
  52.   "KD111.*\\.au-net\\.ne\\.jp",
  53.   "KD119.*\\.au-net\\.ne\\.jp",
  54.   "KD182.*\\.au-net\\.ne\\.jp",
  55.   ".*\\.msa\\.spmode\\.ne\\.jp",
  56.   ".*\\.msb\\.spmode\\.ne\\.jp",
  57.   ".*\\.msc\\.spmode\\.ne\\.jp",
  58.   ".*\\.msd\\.spmode\\.ne\\.jp",
  59.   ".*\\.mse\\.spmode\\.ne\\.jp",
  60.   ".*\\.msf\\.spmode\\.ne\\.jp",
  61.   ".*\\.fix\\.mopera\\.net",
  62.   ".*\\.air\\.mopera\\.net",
  63.   ".*\\.vmobile\\.jp",
  64.   ".*\\.bmobile\\.ne\\.jp",
  65.   ".*\\.mineo\\.jp",
  66.   ".*omed01\\.tokyo\\.ocn\\.ne\\.jp",
  67.   ".*omed01\\.osaka\\.ocn\\.ne\\.jp",
  68.   ".*mobac01\\.tokyo\\.ocn\\.ne\\.jp",
  69.   ".*mobac01\\.osaka\\.ocn\\.ne\\.jp",
  70.   ".*\\.mvno\\.rakuten\\.jp",
  71.   ".*\\.nttpc\\.ne\\.jp",
  72.   "UQ.*au-net\\.ne\\.jp",
  73.   "fl\\d-.*mesh\\.ad\\.jp",
  74.   "neoau.*mesh\\.ad\\.jp",
  75.   ".*\\.ap\\.dream\\.jp",
  76.   ".*\\.ap\\.mvno\\.net",
  77.   "fenics\\d+\\.wlan\\.ppp\\.infoweb\\.ne\\.jp"
  78. );
  79. my @mobile_lines_whois = (
  80.   "Plus One marketing",
  81.   "LogicLinks",
  82.   "SORASIM"
  83. );
  84. my @rakuten_mno_ip = (
  85.   "101\\.102\\.(?:\\d\\.|[1-5]\\d\\.|6[0-3]\\.)\\d{1,3}",
  86.   "103\\.124\\.[0-3]\\.\\d{1,3}",
  87.   "110\\.165\\.(?:1(?:2[89]|[3-9]\\d)|2\\d{2})\\.\\d{1,3}",
  88.   "119\\.30\\.(?:19[2-9]|2\\d{2})\\.\\d{1,3}",
  89.   "119\\.31\\.1(?:2[89]\\.|[3-5]\\d\\.)\\d{1,3}",
  90.   "133\\.106\\.(?:1(?:2[89]|[3-9]\\d)|2\\d{2})\\.\\d{1,3}",
  91.   "133\\.106\\.(?:1[6-9]\\.|2\\d\\.|3[01]\\.)\\d{1,3}",
  92.   "133\\.106\\.(?:3[2-9]\\.|[45]\\d\\.|6[0-3]\\.)\\d{1,3}",
  93.   "133\\.106\\.(?:6[4-9]\\.|[7-9]\\d\\.|1(?:[01]\\d|2[0-7])\\.)\\d{1,3}",
  94.   "133\\.106\\.(?:[89]\\.|1[0-5]\\.)\\d{1,3}",
  95.   "157\\.192(?:\\.\\d{1,3}){2}",
  96.   "193\\.114\\.(?:19[2-9]|2\\d{2})\\.\\d{1,3}",
  97.   "193\\.114\\.(?:3[2-9]\\.|[45]\\d\\.|6[0-3]\\.)\\d{1,3}",
  98.   "193\\.114\\.(?:6[4-9]\\.|[78]\\d\\.|9[0-5]\\.)\\d{1,3}",
  99.   "193\\.115\\.(?:\\d\\.|[12]\\d\\.|3[01]\\.)\\d{1,3}",
  100.   "193\\.117\\.(?:[9][6-9]\\.|1(?:[01]\\d|2[0-7])\\.)\\d{1,3}",
  101.   "193\\.118\\.(?:\\d\\.|[12]\\d\\.|3[01]\\.)\\d{1,3}",
  102.   "193\\.118\\.(?:6[4-9]\\.|[78]\\d\\.|9[0-5]\\.)\\d{1,3}",
  103.   "193\\.119\\.(?:1(?:2[89]|[3-9]\\d)|2\\d{2})\\.\\d{1,3}",
  104.   "193\\.82\\.1(?:[6-8]\\d|9[01])\\.\\d{1,3}",
  105.   "194\\.193\\.2(?:2[4-9]|[34]\\d|5[0-5])\\.\\d{1,3}",
  106.   "194\\.193\\.(?:6[4-9]\\.|[78]\\d\\.|9[0-5]\\.)\\d{1,3}",
  107.   "194\\.223\\.(?:[9][6-9]\\.|1(?:[01]\\d|2[0-7])\\.)\\d{1,3}",
  108.   "202\\.176\\.(?:1[6-9]\\.|2\\d\\.|3[01]\\.)\\d{1,3}",
  109.   "202\\.216\\.(?:\\d\\.|1[0-5]\\.)\\d{1,3}",
  110.   "210\\.157\\.(?:19[2-9]|2(?:[01]\\d|2[0-3]))\\.\\d{1,3}",
  111.   "211\\.133\\.(?:[6-8]\\d|9[01])\\.\\d{1,3}",
  112.   "211\\.7\\.(?:[9][6-9]\\.|1(?:[01]\\d|2[0-7])\\.)\\d{1,3}",
  113.   "219\\.105\\.1(?:4[4-9]|5\\d)\\.\\d{1,3}",
  114.   "219\\.105\\.(?:19[2-9]|2\\d{2})\\.\\d{1,3}",
  115.   "219\\.106\\.(?:\\d{1,2}\\.|1(?:[01]\\d|2[0-7])\\.)\\d{1,3}"
  116. );
  117. #モバイル回線のslip_id
  118. my @mobile_ids = (
  119.   "Sr",
  120.   "Sp",
  121.   "Sa",
  122.   "Sd",
  123.   "SD",
  124.   "MM"
  125. );
  126. #モバイル回線のニックネーム
  127. my @mobile_nicknames = (
  128.   "オッペケM",
  129.   "ササクッテロM",
  130.   "アウアウアーM",
  131.   "アウアウイーM",
  132.   "アウアウウーM",
  133.   "アウアウエーM",
  134.   "アウアウオーM",
  135.   "アウアウカーM",
  136.   "スプーM",
  137.   "スプッッM",
  138.   "スップM",
  139.   "スッップM",
  140.   "スププM",
  141.   "スフッM",
  142.   "ペラペラM",
  143.   "エアペラM",
  144.   "ブーイモM",
  145.   "ベーイモM",
  146.   "オイコラミネオM",
  147.   "ワントンキンM",
  148.   "ワンミングクM",
  149.   "バットンキンM",
  150.   "バッミングクM",
  151.   "ラクッペペM",
  152.   "ラクラッペM",
  153.   "アウアウクーM",
  154.   "ドコグロM",
  155.   "ドナドナーM",
  156.   "トンモーM",
  157.   "アメM",
  158.   "ニャフニャM",
  159.   "イルクンM",
  160.   "ゲマーM",
  161.   "フリッテルM"
  162. );
  163.  
  164. #スマホ・タブレット判定
  165. if ($ua =~ /.*(iphone|ipad|android|mobile).*/i) {
  166.   $slip_nickname = "ワッチョイW";
  167. }
  168. #逆引き判定
  169. if ($remoho eq "") { #逆引きできない場合
  170.   my $isunknown = "yes";
  171.   #モバイル回線判定
  172.   my $res = whois($ip_addr);
  173.   my $mobile_nickname_idx = -1;
  174.   for my $name (@mobile_lines_whois) {
  175.     if ($res =~ /.*${name}.*/) {
  176.       $slip_id = "MM";
  177.       $slip_nickname = $mobile_nicknames[$mobile_nickname_idx];
  178.       $slip_aa = $slip_id;
  179.       $slip_bb = $slip_ip;
  180.       $isunknown = "no";
  181.       last;
  182.     }
  183.     $mobile_nickname_idx--;
  184.   }
  185.   #楽天モバイル(MNO)判定
  186.   if ($isunknown eq "yes") {
  187.     for my $name (@rakuten_mno_ip) {
  188.       if ($ip_addr =~ /${name}/) {
  189.         $slip_id = "MM";
  190.         $slip_nickname = "テテンテンテンM";
  191.         $slip_aa = $slip_id;
  192.         $slip_bb = $slip_ip;
  193.         $isunknown = "no";
  194.         last;
  195.       }
  196.     }
  197.   }
  198.   #逆引き不可能 アンタダレ
  199.   if ($isunknown eq "yes") {
  200.     $slip_id = "Un";
  201.     $slip_nickname = "アンタダレ";
  202.     $slip_aa = $slip_id;
  203.     $slip_bb = $slip_ip;
  204.   }
  205. }else{ #逆引きできる場合
  206.   #モバイル回線判定
  207.   my $mobile_id_idx = 0;
  208.   my $mobile_nickname_idx = 0;
  209.   for my $name (@mobile_lines_remoho) {
  210.     if ($remoho =~ /^${name}$/) {
  211.       $slip_id = $mobile_ids[$mobile_id_idx];
  212.       $slip_nickname = $mobile_nicknames[$mobile_nickname_idx];
  213.       $slip_aa = $slip_id;
  214.       $slip_bb = $slip_ip;
  215.       last;
  216.     }
  217.     if ($mobile_id_idx < 2 || $mobile_nickname_idx =~ /^(7|9|15)$/) {
  218.       $mobile_id_idx++;
  219.     }
  220.     $mobile_nickname_idx++;
  221.   }
  222.   #社畜判定
  223.   if ($remoho =~ /^.+\.co\.jp$/) {
  224.     $slip_nickname = "シャチーク";
  225.   }
  226. }
  227.  
  228. #国を判定
  229. my $gi = Geo::IP->open("./GeoIPCity.dat", GEOIP_STANDARD);
  230. my $record = $gi->record_by_addr($ip_addr);
  231. my $ip_country =  $record->country_code;
  232. if ($ip_country =~ /^(?!.*JP).*$/) {
  233.   $slip_nickname = "ガイコーク[${ip_country}]";
  234.   $slip_aa = $ip_country;
  235.   $slip_bb = $slip_ip;
  236. }
  237.  
  238. #bbs_slipを生成
  239. my $bbs_slip = "${slip_nickname} ${slip_aa}${slip_bb}-${slip_cccc}";
  240.  
  241.  
  242. print "Content-Type: text/html; charset=UTF-8\n\n";
  243. print "<html>\n";
  244. print "<head><title>ワッチョイもどき生成テスト</title></head>\n";
  245. print "<body>\n";
  246. print "<h1>ワッチョイもどき生成テスト</h1>\n";
  247. print "<p>$bbs_slip</p>\n";
  248. print "</body>\n";
  249. print "</html>\n";
Advertisement
Add Comment
Please, Sign In to add comment