Как определить страну прокси, убрать Китайские прокси и полностью перезаписать файл финальным результатом?

Есть php скрипт для проверки SOCKS5 прокси.
Скрипт смотрит файл: gotovo_vse_sellery_bezdybley.txt и проверяет пустой или нет этот файл. Если же файл - пустой, то скрипт сразу же останавливается .

Если файл не пустой, то скрипт проверяет прокси из файла на валидность таким методом:
Скрипт посылает строчку \x05\x01\x00 каждому соксу с которым удалось соединиться, если первые 2 байта ответа \x05\x00\ то socks5 считается валидным

и во время чека - скрипт сохраняет валидные SOCKS5 в файл: socks5_valid.txt

<?php
 $socks5_list = explode ("\n", str_replace ("\r", "", file_get_contents (dirname(__FILE__)."/gotovo_vse_sellery_bezdybley.txt")));
if (empty($socks5_list))
{
    exit(1);
}
//скрипт получения двухсимвольного кода страны
/* 
$country = geoip_country_code_by_name('www.example.com');
if ($country) {
    echo 'Хост расположен в ' . $country; 
*/ 
 function _check_socks5 ($socks = array(), $filename)
 {
  foreach ($socks as $s)
  {
   list ($ip, $port) = explode (":", $s);
   if ($socket = @fsockopen ($ip, $port, $errno, $errstr, 1))
   {
    $threads [$s] = $socket;
   }
  }
  foreach ($threads as $s => $h)
  {
   fwrite ($h, "\x05\x01\x00");
  }
  foreach ($threads as $s => $h)
  {
   $r = fread ($h, 2);
   if ((ord ($r [0]) == 5) && (ord ($r [1]) == 0))
   {
    file_put_contents ($filename, $s."\r\n", FILE_APPEND);
   }
  }
 }

 _check_socks5 ($socks5_list, dirname(__FILE__)."/socks5_valid.txt");
?>


2 вопроса:
- Так как скрипт запускается с периодичностью каждые 2 минуты, то он захламляет файл старыми результатами. Как сделать, чтоб он не добавлял новые результаты после старых результатов, а полностью перезаписывал файл: socks5_valid.txt новыми результатами ?

- Как правильно прописать код определения страны этих проксей, чтоб из валидных результатов удалить Китайские прокси? Код ISO Китая: CN

Нашел такой скрипт получения двухсимвольного кода страны , но не знаю как его добавить с основным кодом чекинга. Простите нуба за незнание php

Cкрипт получения двухсимвольного кода страны:
$country = geoip_country_code_by_name('www.example.com');
if ($country) {
    echo 'Хост расположен в ' . $country;
  • Вопрос задан
  • 366 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Непримиримая борьба с прокси продолжается? :-P

<?php
 $socks5_list = explode ("\n", str_replace ("\r", "", file_get_contents (dirname(__FILE__)."/gotovo_vse_sellery_bezdybley.txt")));
if (empty($socks5_list))
{
    exit(1);
}
 function _check_socks5 ($socks = array(), $filename)
 {
  foreach ($socks as $s)
  {
   list ($ip, $port) = explode (":", $s);
   if (geoip_country_code_by_name($ip) == "CN") continue;
   if ($socket = @fsockopen ($ip, $port, $errno, $errstr, 1))
   {
    $threads[$s] = $socket;
   }
  }
  foreach ($threads as $s => $h)
  {
   fwrite ($h, "\x05\x01\x00");
  }
  foreach ($threads as $s => $h)
  {
   $r = fread ($h, 2);
   if ((ord ($r [0]) == 5) && (ord ($r [1]) == 0))
   {
    file_put_contents ($filename, $s."\r\n");
   }
  }
 }

 _check_socks5 ($socks5_list, dirname(__FILE__)."/socks5_valid.txt");
?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@AndryG
Как сделать, чтоб он не добавлял новые результаты после старых результатов, а полностью перезаписывал файл: socks5_valid.txt новыми результатами ?


file_put_contents ($filename, $s."\r\n", FILE_APPEND);

Убрать параметр FILE_APPEND
Ответ написан
Комментировать
@zlo1
....Cкрипт получения двухсимвольного кода страны:..

сначала надо получить IP на выходе прокси
а потом прикрутить базу MaxMind2/.... .mmdb
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы