DLink GetIP v.0.3 — Просмотр внешнего IP у ADSL-модемов




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

33 Comments

  1. Lihodej

    Прикольно, у меня 2540-все работает нормально. Большое спасибо!

    Reply
  2. iddqd

    Всегда пожалайста!

    Reply
  3. ValentinV

    Ставлю (+).

    А может знаете еще как проверить возможность

    «Подключения к удаленному рабочему столу»

    текущего компьютера.

    Reply
  4. ValentinV

    Дело в том, что у меня почемуто нет внешнего IP,

    хотя все совпадает.

    Reply
  5. larisab

    Сделала закладку, как появится ADSL, скачаю, ставлю плюс заранее. Использую «ушедшую в глубины сайта»- очень классная программа.

    Reply
  6. iddqd

    2 ValentinV

    Не совсем понял, что вы имеете в виду? Открыт ли порт, или включен ли доступ вообще?

    Reply
  7. ValentinV

    (6)* При ответе на комментарий, указывайте его номер в круглых скобках,

    например, (1). :):)

    Хочу получить доступ «Подключение к удаленному рабочему столу» с работы.

    (Или, или еще «HTTP»).

    Вроде все настроил правильно.

    Компа в инете нет.

    Одни говорят, виноват «Авангард-adsl».

    Другие — нужен просто фиксированный IP адрес.

    Пробовал в «Авангард-adsl» обратится, говорят, что не знают.

    Стал в инете искать. Кто, что пишет.

    Нашел Вашу разработку.

    Пишет, «Ваш текущий IP:». И все.

    Как правильно проанализировать не выходя из дома этот момент?

    Reply
  8. int18h

    (7) Пошукай в гугле по запросу «NO-IP» штука отличная! Софтинка автоматически обнавляет ip и переназначает на него выделенный при регистрации домен. А дальше инсталишь любой серверный софт закрываешь ненужные порты и впринципе все 🙂

    Reply
  9. int18h

    А разработчику +… конечно

    Reply
  10. ValentinV

    (8)+

    У вас вроде есть проги.

    Еще дельные советы будут?

    Reply
  11. ValentinV

    (6). Только я причны не понял.

    Почему нет IP «DLink GetIP v.0.3» (7), если он есть(http://2ip.ru/)?

    Почему в инете нет компа, если есть IP?

    Reply
  12. Lihodej

    (6) Если у Вас модем Д-Линк то ненужны Вам всякие «NO-IP». Заходите сюда http://www.dyndns.com/ регестрируетесь, выбираете желаемый дмен и имя, в Д-Линке есть такая фича: DNS -> Dynamic DNS выбираете D-DNS provider — DynDNS.org. Hostname — имя с доменом (напр. lihodej.homeip.net) логин и пароль такой как при регистрации http://www.dyndns.com/. Вот и всё, теперь при каждой смене ай-пи, модем сам будет отсылать новый адрес на DynDNS.org и при попытке прейте по вашему адресу вы будете попадать на свой компьютер, нужно будет чуток поиграться с портами)

    Reply
  13. iddqd

    По поводу того, что «DLink GetIP» не показывает собственно IP — тестировался он на модеме dLink2500U, на других модемах, возможно, потребуется настройка.

    Для настройки надо зайти на модем телнетом, выполнить ifconfig, посмотреть ответ, и прописать в программе нужные строки.

    Например, ifconfig мне выдал (ненужное пропускаю):

    ppp_60_184_1 Link encap:Point-Point Protocol

    inet addr:91.182.136.130 P-t-P:211.218.216.164 Mask:255.255.25

    5.255

    UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1

    RX packets:18427 errors:0 dropped:0 overruns:0 frame:0

    TX packets:20480 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:3

    RX bytes:9425517 (8.9 MiB) TX bytes:9987852 (9.5 MiB)

    мне нужна строчка «91.182.136.130». Рядом с ней я ищу некую уникальную строку, которая встречается в этом ответе только один раз. В моем случае это — «P-t-P:». Указываю ее в программе в разделе «Поиск IP».

    Далее. Вижу, что нужный мне IP находится на 16 символов назад от начала искомой строки. Соответсвенно, в поле «Искать IPпо смещению» пишу -18 (чтобы точно с запасом — программа нецифровые символы не возьмет).

    Еще возможен вариант, что телнетовский порт (23) закрыт файерволлом или на самом модеме.

    Еще возможно, что модем у вас работает как бридж, а не как роутер. В этом случае смотрите свой внешний IP банальной командой ipconfig в консоли виндов.

    Чтобы подключиться к вашему удаленному рабочему столу (RDP), нужно, чтобы на вашей машине был открыт порт 3389. А если у вас модем в режиме роутера — то еще и маппинг с внешнего IP на ваш локальный.

    че-та многа букофф получилось..

    Reply
  14. iddqd

    По поводу динамического IP — мой модем умеет работать с DynDNS.com. Соответственно, я всегда могу обратиться к нему из инета по адресу вида: MyCompName.dyndns.com

    Reply
  15. ValentinV

    (13)>нужно, чтобы на вашей машине был открыт порт 3389.

    А где дверь или окно?

    >А если у вас модем в режиме роутера

    А в каком он должен быть и какие еще бывают и зачем мне это знать?

    > еще и маппинг с внешнего IP на ваш локальн…

    На Си про это долго блудить словами могу

    ——————————————

    Плюсами завалю.

    У меня DLink 2500U.

    IP «DLink GetIP v.0.3» — не показывает,

    http://2ip.ru — показывает что есть IP

    Как настроить «Подключение к удаленному рабочему столу», FTP и HTTP

    и проверить не используя второй компьютер?

    Reply
  16. ValentinV

    (13)Сейчас говорил с Авангардом.

    Они говорят, что надо настраивать модем как мост, бридж.

    Reply
  17. iddqd

    (15) Зайдем с другой стороны. 🙂

    Вам, чтобы выйти в интернет, надо просто включить комп и модем, или надо еще на рабочем столе ярлык соединения щелкнуть?

    Если второе, то моя программа ничем не поможет.

    Если первое, то запустите telnet.exe

    там наберите: open 192.168.1.1

    (192.168.1.1 — ваш адрес модема)

    Введите логин и пароль на администрирование модема,

    затем введите команду ifconfig, и все, что она выдала напишите сюда.

    Если к модему телнетом вы подключиться не можете, то либо у вас все-таки модем в режиме моста, либо файерволл какой не пускает.

    Кроме того, если я правильно понял ваш пост, то почитать про NAT, шлюзы и маппинг портов и зачем это надо я вам настоятельно рекомендую, чтобы хотя бы общее представление было.

    Reply
  18. ValentinV

    (17)У меня интернет-шлюз.

    Вот тут похожая настройка FTP

    http://www.dvgu.ru/meteo/PC/NetCreat4.htm

    Настроить не удалось, может что не так делаю. А как и что надо делать?



    Пробовал мост. Ничего не дало.



    >почитать про NAT, шлюзы и маппинг портов

    Знал бы что читать, вопросов не было бы

    ===

    Хотя бы как-то увидеть его в интернет?

    Ведь и Ваша программа не видет.

    Reply
  19. ValentinV

    (17) Так может DLink GetIP v.0.3 не показывает у меня внешний IP

    из-за того, что шлюз не правильно настроен или какая еще …NAT…?

    Reply
  20. iddqd

    (19) Если инет есть — шлюз настроен правильно.

    Телнетом, как я уже писал, пробовали подключаться?

    В консоли виндов наберите

    ipconfig /all

    и скиньте результат сюда

    Reply
  21. ValentinV

    (20)

    Настройка протокола IP для Windows

    Имя компьютера . . . . . . . . . : program

    Основной DNS-суффикс . . . . . . :

    Тип узла. . . . . . . . . . . . . : неизвестный

    IP-маршрутизация включена . . . . : нет

    WINS-прокси включен . . . . . . . : нет

    Подключение по локальной сети 2 — Ethernet адаптер:

    DNS-суффикс этого подключения . . :

    Описание . . . . . . . . . . . . : Atheros AR8121/AR8113/AR8114 PCI-E E

    thernet Controller

    Физический адрес. . . . . . . . . : 00-23-54-89-B6-8E

    Dhcp включен. . . . . . . . . . . : да

    Автонастройка включена . . . . . : да

    IP-адрес . . . . . . . . . . . . : 192.168.1.2

    Маска подсети . . . . . . . . . . : 255.255.255.0

    Основной шлюз . . . . . . . . . . : 192.168.1.1

    DHCP-сервер . . . . . . . . . . . : 192.168.1.1

    DNS-серверы . . . . . . . . . . . : 192.168.1.1

    Аренда получена . . . . . . . . . : 15 июня 2009 г. 2:30:59

    Аренда истекает . . . . . . . . . : 16 июня 2009 г. 2:30:59

    Reply
  22. Душелов

    Если просто нужен внешний айпи? То можно сделать примерно так:

    Код
    Функция ПолучитьВнешнийIP()
       Результат = "Не определен";
       
       Попытка
           HTTP = Новый HTTPСоединение("whatismyip.com");
       Исключение
          Сообщить(ОписаниеОшибки());
          Возврат Результат;
       КонецПопытки;
       
       ВрФайл = ПолучитьИмяВременногоФайла("txt");
       Попытка
          HTTP.Получить("/default.asp", ВрФайл);
       Исключение
          Сообщить(ОписаниеОшибки());
          Возврат Результат;
       КонецПопытки;
       
       Т = Новый ТекстовыйДокумент;
       Т.Прочитать(ВрФайл);
       Текст = Т.ПолучитьТекст();   
       СтрПоиска = "<h1>Your IP Address Is: <a href=""tools/ip-address-lookup.asp"" title=""IP Address Lookup"">";
       
       Поз = Найти(Текст, СтрПоиска);
       Если Поз > 0 Тогда
          ПодСтрока = Сред(Текст, Поз + СтрДлина(СтрПоиска), 20);
          Поз = Найти(ПодСтрока, "</a>");
          Результат = Лев(ПодСтрока, Поз - 1);
       КонецЕсли;
       
       УдалитьФайлы(ВрФайл);
       Возврат Результат;
    КонецФункции
    

    Показать полностью

    Reply
  23. iddqd

    (21)

    Reply
  24. iddqd

    (20)

    Теперь запускаешь пуск — выполнить — telnet.exe

    В открывшемся черном окошке пишешь:

    open 192.168.1.1

    и Ентер

    Должна появиться строка с предложением ввести логин. Вводишь логин, затем пароль от своего модема.

    После этого должно появиться приглашение на ввод команд: #

    Пишешь там:

    ifconfig

    и Ентер

    То, что выйдет — тоже скинь сюда.

    Если телнетом подключиться не получается — копай свой комп. Файерволл там, али еще что..

    Reply
  25. ValentinV

    BCM96338 ADSL Router

    (none) login: admin

    Password:

    BusyBox v1.00 (2005.04.12-18:11+0000) Built-in shell (msh)

    Enter ‘help’ for a list of built-in commands.

    # ifconfig

    br0 Link encap:Ethernet HWaddr 00:1B:11:78:6D:0D

    inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

    UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1

    RX packets:2838524 errors:0 dropped:0 overruns:0 frame:0

    TX packets:2588664 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:0

    RX bytes:1005780698 (959.1 MiB) TX bytes:950074000 (906.0 MiB)

    eth0 Link encap:Ethernet HWaddr 00:1B:11:78:6D:0D

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:2838524 errors:0 dropped:0 overruns:0 frame:0

    TX packets:2588420 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:1000

    RX bytes:1056874130 (1007.9 MiB) TX bytes:960519123 (916.0 MiB)

    Interrupt:23 Base address:0x2800

    lo Link encap:Local Loopback

    inet addr:127.0.0.1 Mask:255.0.0.0

    UP LOOPBACK RUNNING MTU:16436 Metric:1

    RX packets:10 errors:0 dropped:0 overruns:0 frame:0

    TX packets:10 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:0

    RX bytes:680 (680.0 B) TX bytes:680 (680.0 B)

    nas_0_35 Link encap:Ethernet HWaddr 02:1B:11:78:6D:0D

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:104826 errors:0 dropped:0 overruns:0 frame:0

    TX packets:78582 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:1000

    RX bytes:76921522 (73.3 MiB) TX bytes:10349335 (9.8 MiB)

    ppp_0_35_1 Link encap:Point-Point Protocol

    inet addr:92.100.169.112 P-t-P:91.122.0.1 Mask:255.255.255.255

    UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1

    RX packets:665 errors:0 dropped:0 overruns:0 frame:0

    TX packets:262 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:3

    RX bytes:90287 (88.1 KiB) TX bytes:33704 (32.9 KiB)

    #

    Reply
  26. ValentinV

    (24)

    1. DLink GetIP v.0.3 не показывает.

    2. Удаленный рабочий стол не работает.

    Reply
  27. iddqd

    (25)

    Должно все работать без проблем — у меня так же выводит.

    В настройках программы пароль на доступ к модему введен?

    В строке «Поиск IP» стоит «P-t-P:»?

    Смещение «-18»?

    Если все так, и не работает — то не знаю что сказать.

    Reply
  28. iddqd

    Значек программы в трее серый или белый?

    Reply
  29. ValentinV

    (27)Вот тут http://chairday.narod.ru/DSL-2500U.html

    у вас сказано прошивку надо менять

    Reply
  30. BorovikSV

    Может я не чего не понял, а почему бы STUN не использовать чтобы узнать свой внешний адрес? Благо STUN серверов полно, тот же stun.sipnet.ru круглосуточно и круглогодично работает.

    И реализация у протокола проще тубаретки (telnet), и железка значения не имеет.

    Reply
  31. iddqd

    (30) BorovikSV,

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

    Reply
  32. BorovikSV

    (31) ты как типичный хороший программист. Чем сложней тем лучше 🙂

    Reply
  33. user1198396

    Вот небольшой лайфхак по удаленному доступу. На даче стоит старый компьютер с камерой. Хочу получить к нему удаленный доступ. В деревне у провайдера нет «белого IP» и приобрести его невозможно.

    DDNS работает, но и это бесполезно, потому что соединения извне тупо закрыты провайдером.

    Поэтому использую вот такой VPN сервис — https://vpnki.ru Они не предоставляют выход в интернет, но объединяют мои туннели — один с дачи, другой с смартфона.

    Вдруг кому-то это поможет.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *