tag:blogger.com,1999:blog-59964261608629615422024-03-05T08:09:31.206-08:00Ленивый блогzloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.comBlogger30125tag:blogger.com,1999:blog-5996426160862961542.post-31883735891644609412023-12-12T14:57:00.000-08:002023-12-12T14:57:55.871-08:00Samsung S24E310HL Store mode<p>Случайно прижал кнопки управления монитором и монитор перешел в режим Store mode. Монитор раз в 10-20 секунд моргает и внизу показывается рекламная втсавка про него. </p><p>Вылечил следующим образом </p><p></p><ol style="text-align: left;"><li>Просто нажать на кнопку по центру</li><li>Два раза нажать на кнопку "вверх"</li><li>Зажать кнопку вправо на 5+ секунд</li></ol><p></p><p>Монитор моргнет и встанет на свои законные места.</p><p><br /></p>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-82847078841226085742022-07-07T04:39:00.002-07:002022-07-08T04:55:52.579-07:00Centos Добавить CA Global SignПервый сертификат с этой страницы<div> https://support.globalsign.com/ca-certificates/intermediate-certificates/organizationssl-intermediate-certificates
(https://secure.globalsign.com/cacert/gsrsaovsslca2018.crt) </div><div><br /></div><div> To add: </div><div> Install the ca-certificates package: </div><div><b>yum install ca-certificates</b> </div><div>Enable the dynamic CA configuration feature: </div><div><b>update-ca-trust force-enable</b> </div><div>Add it as a new file to /etc/pki/ca-trust/source/anchors/: </div><div><b>cp foo.crt /etc/pki/ca-trust/source/anchors/ </b></div><div>Use command: </div><div><b>update-ca-trust extract</b></div>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-60913843416916443122022-04-16T06:21:00.002-07:002022-04-16T06:21:14.231-07:00Linux - вырезать часть текста по строкам<blockquote>sed -n '1,1401p' dump.sql</blockquote>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-21594533231527886492022-04-16T06:11:00.000-07:002022-04-16T06:11:11.164-07:00Postgresql - отключение проверок внешних индексов при дампеВ начале установить
<blockquote>SET session_replication_role = 'replica';</blockquote>
В конце восстановить
<blockquote>SET session_replication_role = 'origin';</blockquote>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-86766415876141506662019-01-16T00:25:00.001-08:002019-01-16T00:25:05.558-08:00C: Вывод строки с ограничением по длине<script src="https://gist.github.com/zloiia/ba05f746fb56c7a3d633f8ab500fb269.js"></script>
zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-42438112708895201272018-08-02T04:03:00.001-07:002018-08-02T04:03:18.825-07:00Создание функциональной HTML копии сайта<div dir="ltr" style="text-align: left;" trbidi="on">
wget -P foldername -mpck --user-agent="" -e robots=off --restrict-file-names=nocontrol -E https://example.com/</div>
Anonymoushttp://www.blogger.com/profile/16693800838900715403noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-75037604160977780512018-08-01T07:01:00.003-07:002018-08-01T07:01:40.419-07:00Создание архивированного образа карты<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; border: 0px; box-sizing: inherit; clear: both; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; padding: 0px; vertical-align: baseline;">
Pretty good and simple way to deal with this is simply pipe it via gzip, something like this:</div>
<pre style="background-color: #eff0f1; border: 0px; box-sizing: inherit; color: #242729; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; box-sizing: inherit; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"># dd if=/dev/sdb | gzip > backup.img.gz
</code></pre>
<div style="background-color: white; border: 0px; box-sizing: inherit; clear: both; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; padding: 0px; vertical-align: baseline;">
This way your image will be compressed and most likely unused space will be squeezed to almost nothing.</div>
<div style="background-color: white; border: 0px; box-sizing: inherit; clear: both; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; padding: 0px; vertical-align: baseline;">
You would use this to restore such image back:</div>
<pre style="background-color: #eff0f1; border: 0px; box-sizing: inherit; color: #242729; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; box-sizing: inherit; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"># cat backup.img.gz | gunzip | dd of=/dev/sdb</code></pre>
</div>
Anonymoushttp://www.blogger.com/profile/16693800838900715403noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-47531460658219004652018-06-28T05:05:00.002-07:002018-06-28T05:05:37.916-07:00SplashScreen на Android под QMLДолго искал простой рабочий мануал по настройке SplashScreen под Android. <a href="https://medium.com/@benlaud/complete-guide-to-make-a-splash-screen-for-your-qml-android-application-567ca3bc70af">https://medium.com/@benlaud/complete-guide-to-make-a-splash-screen-for-your-qml-android-application-567ca3bc70af</a>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-51453838962196714772017-11-09T09:07:00.000-08:002017-11-09T09:07:58.124-08:00Распиновка выводов китайского STlink V2 mini<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKQ7xDh_V-s6KUgN6hMnLLKpz-Fmty3q0c0p6JOxhd3GEcfSDSFI67diLv_Es4_t6ZzYk6WygN9DLMOUiwbPkbu55g3p6LH2xdyHuPJ6u3gHhPbwdcsYThMWYFSPdX4uhNfYAKAZ4O8PFx/s1600/HTB1x.DZQFXXXXavXVXXq6xXFXXXG.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="800" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKQ7xDh_V-s6KUgN6hMnLLKpz-Fmty3q0c0p6JOxhd3GEcfSDSFI67diLv_Es4_t6ZzYk6WygN9DLMOUiwbPkbu55g3p6LH2xdyHuPJ6u3gHhPbwdcsYThMWYFSPdX4uhNfYAKAZ4O8PFx/s320/HTB1x.DZQFXXXXavXVXXq6xXFXXXG.jpg" width="320" /></a></div>
<br />zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-30256373052013091552017-04-11T03:42:00.001-07:002017-04-11T03:42:15.712-07:00Iptables geoiphttps://blog.radjah.ru/2016/04/iptables-geoip.htmlzloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-30104652535946171852017-04-05T02:21:00.001-07:002017-04-05T02:21:41.679-07:00Сихронизация папок Debian - lsyncdНеобычно удобным оказался инструмент <a href="https://github.com/axkibe/lsyncd">https://github.com/axkibe/lsyncd</a> , если есть необходимость синхронизировать локальную папку с удаленной непрерывно. Главное, что можно назначить много конечных точек и все это дело работает в фоне.<br />
<br />zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-49318733309623577342017-03-23T07:26:00.000-07:002017-03-23T07:32:15.301-07:00Kaitai Struct<a href="http://kaitai.io/">http://kaitai.io/</a><br />
судя по описанию, неплохой продукт для создания парсеров бинарных данных, описания структур и главное, разбору уже готового файла по описанию.zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-7902064549104440252017-03-19T10:44:00.000-07:002017-03-19T10:48:29.288-07:00Не определяется сетевая карта на Virt2Real на Windows 10Попала мне тут в руки забавная платка <b>Virt2real</b>. По инструкции, надо просто подключить ее через micro-usb к компу и появится <b>RNDIS</b> интерфейс, через который уде можно общаться. Но не тут то было! При подключении к Windows 10 RNDIS отпределяется как USB-COM переходник.<br />
<b><i>Решение</i></b>: руками насильно подсунуть <a href="http://wiki.virt2real.ru/files/drivers/rndis.cab" target="_blank">эти драйвера</a> на устройство.zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-33176334818818224122017-03-19T09:40:00.000-07:002017-03-19T09:40:13.409-07:00Skype на Windows Xp в 2017 году<div style="text-align: justify;">
Несмотря на то, что на дворе 2017 год, у моего деда все равно стоит невероятно старый комп с ЭЛТ монитором и системником, в котором кипятит воздух старый Celerom на 1,1 ГГц. И управляет всем этим счастьем Windows XP SP2. И в один прекрасный день меня ошарашивают новостью - "Сломался скайп и не заходит в него". </div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
</div>
<a name='more'></a><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6-WGDpFjk_kjcdIJJ3hD2oyBepM2aXBpJVoVDwMa5PcjyB6loyW_C_zaGkscjRVbK9aAsGHwSAa93o7ORg9CBOao1xustYJ1iGCWIgApWwvD6Zq2t9-vZbfMpvyBuqYfuWfSC9l9iE7Ew/s1600/problema-pri-vhode-v-skype-versiya-internet-explorer-ustarela.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="462" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6-WGDpFjk_kjcdIJJ3hD2oyBepM2aXBpJVoVDwMa5PcjyB6loyW_C_zaGkscjRVbK9aAsGHwSAa93o7ORg9CBOao1xustYJ1iGCWIgApWwvD6Zq2t9-vZbfMpvyBuqYfuWfSC9l9iE7Ew/s640/problema-pri-vhode-v-skype-versiya-internet-explorer-ustarela.png" width="640" /></a></div>
Вылезло это счастье после обновления до <b>7.33.105</b>. До этого выходов из скайпа не было, а тут дедушка решился обновиться и случайно вышел. Ладно, пляшем.<br />
В общем, все что я сделал - это удволетворил потребности скайпа - то есть удалил его. Начисто.<br />
Затем обновил IE до 8й версии (<a href="http://www.skaip.su/internet-explorer-8" target="_blank">брал тут</a>).<br />
Затем воткнул версию 7.31.104 (<a href="http://www.skaip.su/skype-7-31-0-104-dlya-windows" target="_blank">брал тут</a>). Не самая новая, но пока работает. После установки сразу рекомендую потушить автоматическое обновление, чтобы не было соблазна его обновить. Прошло 2 дня. Пока все работает. Посмотрим что будет дальше.zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-26322434434800345602017-03-16T00:38:00.000-07:002017-03-16T00:38:18.935-07:00База стран, областей и городов всего мираДля одной из задач было необходимо использовать каталог городов по странам. В итоге был найден чудесный репозиторий <a href="https://github.com/x88/i18nGeoNamesDB">https://github.com/x88/i18nGeoNamesDB</a> . Использовал выгрузку в PostgreSQL.<br />
Из минусов можно заметить только то, что если нужны только отдельные страны, то проще развернуть дамп на тестовом сервере, затем настроить Foreign key в таблице городов и регионов до стран и поудалять ненужные страны.<br />
Данные таблицы хорошо использовать с DjangoORM в связке с <a href="http://django-modeltranslation.readthedocs.io/en/latest/index.html" rel="nofollow" target="_blank">django-modeltranslation</a>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-42877204294150136312017-03-11T17:18:00.004-08:002017-03-11T17:18:22.943-08:00Война с DHCP на LWIP+FreeRTOS после генерации проекта STM32Cube<div style="text-align: justify;">
В общем, решил я поднять как-то свой старый китайский девборд под управлением <b>STM32F107VCT </b>и сделать небольшой проект с использованием сети. Причем именно упороться и сгенерировать проект в <b>STM32Cube</b>. Ну и конечно куда без <b>FreeRTOS</b> ? Но вот загвоздка. DHCP включен, FreeRTOS включен адрес на DHCP сервере резервируется, но не подтверждается устройством. Интересно то, что если не использовать RTOS, а просто в бесконечном цикле вызывать сгенерированную кубом функцию <i style="font-weight: bold;">MX_LWIP_Process, </i>то все работает. "Значит не работает обработчик сети" - подумал я. В конечном итоге оказалось, что проблема в размере кучи. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<a name='more'></a>Стандартный размер кучи у <b>FreeRTOS </b>для Cube 4096. Этого оказывается категорически мало с учтом, что почему-то <b>LWIP </b>по умолчанию запускает целых 2 потока для обслуги себя любимого, резервируя под каждый 1024 слова.<br />
<div style="text-align: justify;">
В итоге, как победил. Захожу в настройки LWIP->Key options и режу настройки <b>TCPIP_THREAD_STACKSIZE, </b><b>DEFAULT_THREAD_STACKSIZE</b> до 128. </div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsVZ4w-lxH1ELRujRTCOsIOcs-Z5dt5Cx80TLrzWsn2XipDT9mZli-sxp98UAi9VhEASUYp8Zy9JfZQLlpZ2Hllr03lI6Jp-BOXY0-Wy5vEZDZn6oN5dIbhAMdU0_0iWlgLLMhc6rhtgNG/s1600/lwipConf.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="" border="0" height="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsVZ4w-lxH1ELRujRTCOsIOcs-Z5dt5Cx80TLrzWsn2XipDT9mZli-sxp98UAi9VhEASUYp8Zy9JfZQLlpZ2Hllr03lI6Jp-BOXY0-Wy5vEZDZn6oN5dIbhAMdU0_0iWlgLLMhc6rhtgNG/s640/lwipConf.PNG" title="LWIP" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Настройки LWIP</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Далее, в настройках FreeRTOS увеличиваю размер кучи в 2 раза до 8192 и минимальный размер стека со 128 до 64.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibCasZEc0_GThG7wD-9spH24yZa63EkgZli30gXkSsBm8-Sr98hy3OECr-LXyb-lSoSA3cjTYv-DsJW3YJviTDG5Jljm76vMfqQCDnPKUJe5LLDJFW0DqusLQEvCpfKyFCUdwoKg3iEHDG/s1600/freertosConf.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibCasZEc0_GThG7wD-9spH24yZa63EkgZli30gXkSsBm8-Sr98hy3OECr-LXyb-lSoSA3cjTYv-DsJW3YJviTDG5Jljm76vMfqQCDnPKUJe5LLDJFW0DqusLQEvCpfKyFCUdwoKg3iEHDG/s640/freertosConf.PNG" width="569" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Настройки FreeRTOS</td></tr>
</tbody></table>
<br /><div style="text-align: justify;">
Пересобираем проект и все работает. </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-76677037320948769852011-04-01T05:06:00.000-07:002011-04-01T05:06:48.017-07:00Atheros Communication AR8152 на Asus Eee PC 1251 под LinuxСтавил тут всю ночь на недобуку свою Asus Eee PC 1251 великую могучую ArchLinux. Все красиво подоткнул и встала проблема - подключение к сети было невозможно по причине того что сетевой в упор не было видно. Всю ночь проебся, но откопал сработавшее решение.<br />
<br />
Сразу упомяну, что версия ядра у меня 2,26 , на других не проверял.<br />
<br />
Итак, в выводе <b>lspci</b> упомянулись такие вещи как<br />
<blockquote><span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;">03:00.0 Network controller: Broadcom Corporation Device 4727 (rev 01)<br />
04:00.0 Ethernet controller: Atheros Communication AR8152 v2.0 Fast Ethernet (rev c1)</span></blockquote>Отлично, значит это то что нужно. На другой машинке подсосал с <a href="http://linuxwireless.org/download/compat-wireless-2.6">http://linuxwireless.org/download/compat-wireless-2.6</a> файл c<span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;">ompat-wireless-2.6.tar.bz2, записал его на флешку и выполнил примерно такой список команд.</span><br />
<span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"><br />
</span><br />
<blockquote><span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;">mount /dev/sdb /mnt<br />
cp /mnt/compat-wireless-2.6.tar.bz2 /root/<br />
cd /root<br />
tar -xjvf compat-wireless-2.6.tar.bz2<br />
cd compat-wireless*<br />
scripts/driver-select atl1c<br />
make<br />
sudo make install</span> </blockquote><br />
А потом благополучно перезагрузилсяzloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com4tag:blogger.com,1999:blog-5996426160862961542.post-12441121569988214062011-02-01T18:16:00.000-08:002011-02-02T17:38:47.105-08:00Выбор из строки числа в формате ExelКак известно, в Экселе иногда встречается запись числа типа<br /><br /><blockquote>1,566653e5</blockquote><br /><br />Где e - это у нас степень числа. Так вот в одном проекте мне нужно было выбрать из строки такое число. Решил эту задачу регуляркой. Сама регулярка конечно моет и не блещет идеалом и сам код можно улучшить, но что есть. Писал на Qt4 C++<br /><br /><blockquote>long double convert(QString in)<br />{<br /> QRegExp rx("([\\-]{0,1}[0-9]{1,}[\\.\\,]{0,1}[0-9]{0,})(|\\e)([\\-]{0,1}[0-9]{0,})");<br /> if(rx.indexIn(in)!=-1)<br /> {<br /> double cel=rx.cap(1).toDouble(); // целая часть<br /> if(rx.cap(2).size()!=0)<br /> {<br /> if(rx.cap(3).size()>0)<br /> {<br /> long double res=pow(cel,rx.cap(3).toDouble());<br /><br /> return res;<br /> }<br /> else<br /> {<br /> QMessageBox::critical(0,QString("Error"),QString("Set a in true format"));<br /> return -100;<br /> }<br /> }<br /> else<br /> {<br /><br /> return cel;<br /> }<br /> }<br /> return in.toDouble();<br />}</blockquote>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-15687247892239755202010-12-01T01:42:00.001-08:002010-12-01T01:42:45.300-08:00Показ изображений в зависимости от разрешения экрана<div xmlns='http://www.w3.org/1999/xhtml'><p>Встречается иногда такая подлая вещь, когда изображение, которое надо вывести на экран, оказывается слишком большим и рвет ко всем чертям дизайн. Как можно обойти эту проблему? Можно пойти по жутко-быдлометоду, как задание параметров height и width у изображение. Например</p><blockquote><p><img src="images/image.gif" width="100px" height="100px"></p></blockquote><blockquote><p/></blockquote><p>Да, такой вариант выведет картинку размером 100*100 , только если исходное изображение было с разрешением 500000*500000 и весило стопицот мегабайт, то оно будет предварительно загружено (все стопицот мегабайт) и потом показано как 100*100. Вывод, ради ускорения загрузки страницы и экономии трафика, надо нарисовать срипт, который будет ужимать изображение до приличных параметров. Ну или, например, нам надо будет выводить картинку в зависимости от разрешения экрана пользователя. Те кто пишет на JavaScript или Java конечно предложат несколько вариантов решения этой проблемы, брызгая слюной, что на этих языках такая проблема решается проще, понятнее и шустрее. Ктулху с ними, мы пишем на PHP. Я столкнулся с такой проблемой, когда писал сайт для одной мебельной компании. И в итоге получился скрипт, который можно использовать для вывода изображений по заданным размерам или же в зависимости от разрешения экрана пользователя.</p><p/><blockquote><p><?php</p></blockquote><blockquote><p>session_start();</p></blockquote><blockquote><p>$width=(!empty($_GET['w']))?(int)$_GET['w']:false;</p></blockquote><blockquote><p>$height=(!empty($_GET['h']))?(int)$_GET['h']:false;</p></blockquote><blockquote><p>if(!$width)</p></blockquote><blockquote><p>{</p></blockquote><blockquote><p> $width=(!empty($_SESSION['w']))?((int)($_SESSION['w'])):800;</p></blockquote><blockquote><p>}</p></blockquote><blockquote><p>if(!$height)</p></blockquote><blockquote><p>{</p></blockquote><blockquote><p> $height=(!empty($_SESSION['h']))?((int)($_SESSION['h'])):800;</p></blockquote><blockquote><p>}</p></blockquote><blockquote><p> </p></blockquote><blockquote><p>if($width<0) $width*=-1;</p></blockquote><blockquote><p>elseif($width==0) $width=800;</p></blockquote><blockquote><p>if($height<0) $height*=-1;</p></blockquote><blockquote><p>elseif($height==0) $height=800;</p></blockquote><blockquote><p> </p></blockquote><blockquote><p>$def_folder="portfolio"; //стандартная папка с изображениями</p></blockquote><blockquote><p>$folder=(!empty($_GET['fd']))?(trim($_GET['fd'])):$def_folder;</p></blockquote><blockquote><p>$file=(!empty($_GET['f']))?(trim($_GET['f'])):"";</p></blockquote><blockquote><p> </p></blockquote><blockquote><p>if(strlen($file)==0 || !file_exists($folder."/".$file))</p></blockquote><blockquote><p>{</p></blockquote><blockquote><p> $im=imagecreatefromgif("images/noimage.gif"); //изображение, если ничего нет файла</p></blockquote><blockquote><p> imagegif($im);</p></blockquote><blockquote><p>}</p></blockquote><blockquote><p>else</p></blockquote><blockquote><p>{</p></blockquote><blockquote><p> $im;</p></blockquote><blockquote><p> create($folder,$file,$im);</p></blockquote><blockquote><p> $imwidth=imagesx($im);</p></blockquote><blockquote><p> $imheight=imagesy($im);</p></blockquote><blockquote><p> $width=(int)($width*0.8);</p></blockquote><blockquote><p> $height=(int)($height*0.8);</p></blockquote><blockquote><p> if($imwidth>$width || $imheight>$height)</p></blockquote><blockquote><p> {</p></blockquote><blockquote><p> $rw=$imwidth-$width;</p></blockquote><blockquote><p> $rh=$imheight-$height;</p></blockquote><blockquote><p> </p></blockquote><blockquote><p> if($rw>$rh)</p></blockquote><blockquote><p> {</p></blockquote><blockquote><p> </p></blockquote><blockquote><p> $k=$width/$imwidth;</p></blockquote><blockquote><p> $height=(int)($imheight*$k);</p></blockquote><blockquote><p> }</p></blockquote><blockquote><p> else</p></blockquote><blockquote><p> {</p></blockquote><blockquote><p> </p></blockquote><blockquote><p> $k=$height/$imheight;</p></blockquote><blockquote><p> $width=(int)($imwidth*$k);</p></blockquote><blockquote><p> }</p></blockquote><blockquote><p> $res=imagecreatetruecolor($width,$height);</p></blockquote><blockquote><p> imagecopyresampled($res,$im,0,0,0,0,$width,$height,$imwidth,$imheight);</p></blockquote><blockquote><p> imagedestroy($im);</p></blockquote><blockquote><p> out($file,$res);</p></blockquote><blockquote><p> imagedestroy($res);</p></blockquote><blockquote><p> }</p></blockquote><blockquote><p> else</p></blockquote><blockquote><p> {</p></blockquote><blockquote><p> out($file,$im);</p></blockquote><blockquote><p> }</p></blockquote><blockquote><p>}</p></blockquote><blockquote><p> </p></blockquote><blockquote><p>function create($folder,$file,&amp;$im)</p></blockquote><blockquote><p>{</p></blockquote><blockquote><p> $patch=$folder."/".$file;</p></blockquote><blockquote><p> </p></blockquote><blockquote><p> $type=strrchr($file,'.');</p></blockquote><blockquote><p> switch($type)</p></blockquote><blockquote><p> {</p></blockquote><blockquote><p> case ".jpg":</p></blockquote><blockquote><p> case ".jpeg":</p></blockquote><blockquote><p> case ".JPG":</p></blockquote><blockquote><p> case ".JPEG": $im=imagecreatefromjpeg($patch); break;</p></blockquote><blockquote><p> case ".png":</p></blockquote><blockquote><p> case ".PNG": $im=imagecreatefrompng($patch); break;</p></blockquote><blockquote><p> case ".gif":</p></blockquote><blockquote><p> case ".GIF": $im=imagecreatefromgif($patch); break;</p></blockquote><blockquote><p> default: $im=imagecreatefromwbmp($patch);</p></blockquote><blockquote><p> }</p></blockquote><blockquote><p> </p></blockquote><blockquote><p>}</p></blockquote><blockquote><p> </p></blockquote><blockquote><p>function out($file,&amp;$im)</p></blockquote><blockquote><p>{</p></blockquote><blockquote><p> $type=strrchr($file,'.');</p></blockquote><blockquote><p> switch($type)</p></blockquote><blockquote><p> {</p></blockquote><blockquote><p> case ".jpg":</p></blockquote><blockquote><p> case ".jpeg":</p></blockquote><blockquote><p> case ".JPG":</p></blockquote><blockquote><p> case ".JPEG": </p></blockquote><blockquote><p> header("Content-type: " . image_type_to_mime_type(IMAGETYPE_JPEG)); </p></blockquote><blockquote><p> imagejpeg($im,'',100);</p></blockquote><blockquote><p> break;</p></blockquote><blockquote><p> case ".png":</p></blockquote><blockquote><p> case ".PNG":</p></blockquote><blockquote><p> header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));</p></blockquote><blockquote><p> imagepng($im);</p></blockquote><blockquote><p> break;</p></blockquote><blockquote><p> case ".gif":</p></blockquote><blockquote><p> case ".GIF":</p></blockquote><blockquote><p> header("Content-type: " . image_type_to_mime_type(IMAGETYPE_GIF));</p></blockquote><blockquote><p> imagegif($im);</p></blockquote><blockquote><p> break;</p></blockquote><blockquote><p> }</p></blockquote><blockquote><p>}</p></blockquote><blockquote><p>?></p></blockquote></div>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-621623931173945182010-07-25T05:45:00.000-07:002010-09-20T14:06:44.431-07:00Получаем аккаунт на HAX.TORИтак, дя тех кто не в курсе, это вообще то такой веселый и интересный хакерский квестик. Но у него есть один БОООЛЬШОЙ плюс. Если пройти первые 5 уровней, то в подарок получаем аккаунт на пользование shell хостингом с 2000 полновесных мегабайтов места.<br /><br />Подробнее об установленном софте можно почитать <a href="http://shell.tor.hu/dpkg.txt">ТУТ</a><br /><br />Итак, сразу начнем гробастать такое Щасте!<br /><br />Первым делом переходим на <a href="http://hax.tor.hu/warmup1/">http://hax.tor.hu/warmup1/</a> и попадаем на первое задание. В нем нам нужно ввести пароль. Внизу лежит подсказка, типа пароль лежит в исходнике. Не проблема. Открываем исходный код страницы и листаем вниз. Там после много переводов строк (это чтобы никто не нашел) видим функцию function a() на яваскрипте. Тут даже язык особо знать не надо (я например не заню, но все одно раскумекал), чтобы понять, как она работет. Там будет что то из серии<br /><br /><blockquote>thepw = 'warmup1';<br />thepw = thepw+'mat';<br />thepw = thepw + 'roska';</blockquote><br /><br />Это значит что нам для пароля надо всего то собрать во едину строку все что в кавычках. в данном случае получился пароль <span style="font-style:italic;"><span style="font-weight:bold;">warmup1matroska</span></span><br /><br />Далее попадаем на второе задание. Не буду пояснять как его делать, сразу дам ответ, он все равно не меняется =). Итак, ответ <br /><blockquote><span style="font-weight:bold;"><span style="font-style:italic;">SSH-1.99-Server-VII</span></span></blockquote><br /><br />Третье задание. Тут надо выбрать несуществующий вариант из списка. Есть два пути решения этой проблемы, но я пошел по самому простому из всех самых простых. Так как форма передает данные методом GET, ну я и передал. Просто переходим по такой ссылке как <br /><blockquote><span style="font-weight:bold;"><a href="https://hax.tor.hu/warmup3/?chosen=Bacon" >https://hax.tor.hu/warmup3/?chosen=Bacon</a></span></blockquote><br />То есть просто дописываем <span style="font-weight:bold;">?chosen=Bacon</span> к тому адресу что был<br /><br />Четвертое задание: Тут тоже надо ввести пароль. Снизу дана ссылка на страницу на которой пароль лежит, но все браузеры блокируются. Лично я пошел по пути наименьшего сопротивления и использовал PHP<br /><br /><blockquote><br />print_r(file_get_contents("http://hax.tor.hu/pwfor4/"));<br /></blockquote><br />и получил строку<br /><blockquote><span style="font-style:italic;">The password is: spaceship</span></blockquote><br /><br />Пятое задание. Тут надо расшифровать хэш. Не знаю как насчет того, меняют ли они ответ, но алгоритм решения тут следующий. Нам выдается хэш. Он состоит из четного числа чисел. Методом проб и ошибок я понял, что каждый символ кодируется двумя числами. ТО есть разбиваем хэш на блоки по два числа. Далее, после недолгих экспериментов было выяснено, что первое число блока не меняется, если не меняется символ. То есть как раз первое число из блока отвечает за код символа. Ну а далее все просто. Я пробрутил все символы и выписал их коды. Вот что получилось.<br /><table width="100%" border="1"><tr><td><b>Символ</b></td><td><b>Код</b></td></tr><tr><td>a</td><td>86</td></tr><tr><td>b</td><td>85</td></tr><tr><td>c</td><td>84</td></tr><tr><td>d</td><td>83</td></tr><tr><td>e</td><td>82</td></tr><tr><td>f</td><td>81</td></tr><tr><td>g</td><td>80</td></tr><tr><td>h</td><td>95</td></tr><tr><td>i</td><td>94</td></tr><tr><td>j</td><td>93</td></tr><tr><td>k</td><td>92</td></tr><tr><td>l</td><td>91</td></tr><tr><td>m</td><td>90</td></tr><tr><td>n</td><td>89</td></tr><tr><td>o</td><td>88</td></tr><tr><td>p</td><td>71</td></tr><tr><td>q</td><td>70</td></tr><tr><td>r</td><td>69</td></tr><tr><td>s</td><td>68</td></tr><tr><td>t</td><td>67</td></tr><tr><td>u</td><td>66</td></tr><tr><td>v</td><td>65</td></tr><tr><td>w</td><td>64</td></tr><tr><td>x</td><td>79</td></tr><tr><td>y</td><td>78</td></tr><tr><td>z</td><td>77</td></tr></table><br /><br />То есть теперь все что нужно было сделать, это просто взять каждое нечетное число и сравнить его с таблицей.<br /><br />Если кому надо - прикладываю таблицу кодов заглавных букв<br /><table width="100%" border="1"><tr><td><b>Символ</b></td><td><b>Код</b></td></tr><tr><td>A</td><td>118</td></tr><tr><td>B</td><td>117</td></tr><tr><td>C</td><td>116</td></tr><tr><td>D</td><td>115</td></tr><tr><td>E</td><td>114</td></tr><tr><td>F</td><td>113</td></tr><tr><td>G</td><td>112</td></tr><tr><td>H</td><td>127</td></tr><tr><td>I</td><td>126</td></tr><tr><td>J</td><td>125</td></tr><tr><td>K</td><td>124</td></tr><tr><td>L</td><td>123</td></tr><tr><td>M</td><td>122</td></tr><tr><td>N</td><td>121</td></tr><tr><td>O</td><td>120</td></tr><tr><td>P</td><td>103</td></tr><tr><td>Q</td><td>102</td></tr><tr><td>R</td><td>101</td></tr><tr><td>S</td><td>100</td></tr><tr><td>T</td><td>99</td></tr><tr><td>U</td><td>98</td></tr><tr><td>V</td><td>97</td></tr><tr><td>W</td><td>96</td></tr><tr><td>X</td><td>111</td></tr><tr><td>Y</td><td>110</td></tr><tr><td>Z</td><td>109</td></tr></table>zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com1tag:blogger.com,1999:blog-5996426160862961542.post-74035073972030074832010-06-30T08:46:00.000-07:002010-06-30T08:50:54.934-07:00Решение проблемы grub error: symbol 'grub_puts_' not foundПосле обновления Ubuntu 9.10 до версии 10.04 у некоторых выскакивает ошибка<br /><br /><blockquote>grub error: symbol 'grub_puts_' not found</blockquote><br /><br />Решается путем загрузки с установочного диска Ubuntu и переустановки системного загрузчика Grub:<br /><br />1. После згрузки с диска выбрать пункт меню <span style="font-weight:bold;">"Восстановить систему"</span><br />2. Ответить на все вопросы (раскладка клавиатуры, имя компьютера в сети и т.д.)<br />3. Выбрать устройство, используемое в качестве корневой файловой системы (раздел, на который установлена Ubuntu)<br />4. Переустановка системного загрузчика Grub<br />5. Выбрать жесткий диск, куда установить Grub (обычно (hd0)). Для того чтобы точно узнать, воспользоваться командой <span style="font-style:italic;">find /boot/grub/stage1</span><br />6. Перезагрузитьсяzloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-8062810999463423132010-06-22T17:43:00.000-07:002010-06-22T19:20:08.262-07:00Модный способ получения прямых ссылок на видео ВКонтактеСтолкнулся тут с проблемой. Не работают сервисы для получения прямых сылок на видео ВКонтакте. То есть либо тормозят они, либо выдают что нифига не найдено. Ну и решил я мозгом пораскинуть. Посмотрел на исходный код страницы, запутался нахрен и понял что писать парсер для этого всего дела штука неблагодарная. И посему решил пойти другим путем, модным. Ведь когда мы жмем кнопку "Воспроизвести" отправляется HTTP запрос на получение потока, тобишь самого файла. Вот его и будем ловить.<br /><br />Для сего действа я использовал браузер <span style="font-weight:bold;">Firefox</span> и плагин к нему под названием <span style="font-weight:bold;">HTTP Headers</span> <a href="https://addons.mozilla.org/en-US/firefox/addon/3829/">СКАЧАТЬ</a><br /><br />Дальше делаем так. Заходим на страницу с которой жутко надо стянуть видео и дожидаемся пока все загрузится. Это нужно для того чтобы быстрее потом заголовки читать. Затем открываем <span style="font-style:italic;">Инструменты-> Просмотр HTTP-заголовков</span> и видим такое вот модное окошко<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKyGMhuSJUp3GUBAVnyuk01Ob63VgTIt9lF5fs2A_tqTBEseuoW-_Gii4SlpcRWHT6YWER9uauBBa9wA6e4jwofgRtQygQmLWfDWfGUbN1rwti6HbmN0cB1Ty_LunenL5P-lq1PqZ0Dy65/s1600/29.png" target="_blank"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKyGMhuSJUp3GUBAVnyuk01Ob63VgTIt9lF5fs2A_tqTBEseuoW-_Gii4SlpcRWHT6YWER9uauBBa9wA6e4jwofgRtQygQmLWfDWfGUbN1rwti6HbmN0cB1Ty_LunenL5P-lq1PqZ0Dy65/s320/29.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5485766368971863650" /></a><br /><br />Затем кликаем по кнопке <span style="font-style:italic;">Воспроизвести</span> в браузере и смотрим в окнопросмотра заголовков. И вуаля, что же мы там видим? Правильно, запрос на видеофайл<br />В моем случае это строка <br /><blockquote>http://v506.vkadre.ru/assets/videos/4a7155042b7c-107098476.vk.flv</blockquote><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge9EMcY8AF1_Zrrn4yUai1_0DuuiosFJU6pzVyYifKo7OmnEQ0wrKNUbyrmz7vUF8DNlKtmC1EkWejU2rhF0BKAoaaVWd7wfJRG3mBCYryaUxwD6YA-97WoTtjDQE-dqy7Ua6298Via42R/s1600/30.png" target="_blank"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge9EMcY8AF1_Zrrn4yUai1_0DuuiosFJU6pzVyYifKo7OmnEQ0wrKNUbyrmz7vUF8DNlKtmC1EkWejU2rhF0BKAoaaVWd7wfJRG3mBCYryaUxwD6YA-97WoTtjDQE-dqy7Ua6298Via42R/s320/30.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5485767355483167170" /></a><br /><br />Теперь просто вставляем эту строку в адресную строку браузера или в менеджер закачек и качаем!<br /><br />P.S.: Этот метод можно применять где угодно. Хоть на Ютубе, хоть на Рутубе хоть у черта на рогах.zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com1tag:blogger.com,1999:blog-5996426160862961542.post-48292997780439054562010-03-14T01:27:00.000-08:002010-03-14T03:07:07.941-07:00Установка MySQL базы данных на сервере с FreeBSD на бортуЗачем нужна эта штука я пояснять не буду, потому что если уж ТЫ залез сюда и читаешь это, то вряд ли из тупого праздного любопытства.<br />Итак, для начала обновим прорты (ну или поставим, если у кого их нет)<br /><blockquote><span style="font-weight:bold;"># portsnap fetch extract update</span></blockquote><br />и можем пойти попить чайку или покурить<br /><br />после того, как получим красивое сообщение<br /><blockquote>Building new INDEX files... done.<br />Ports tree is already up to date.</blockquote><br /><br />идем в порты и собираем там всю эту гадость<br /><blockquote><span style="font-weight:bold;"># cd /usr/ports/databases/mysql51-server</span></blockquote><br /><br />если ты решил сразить всех или просто позадротствовать, то смело набирай <br /><blockquote><span style="font-weight:bold;"># make configure</span></blockquote><br />и тщательно выбирай настройки. Мы же ограничимся дефолтными настройками<br /><blockquote><span style="font-weight:bold;"># make install clean</span></blockquote><br />и снова идем курить... надолго курить...<br /><br />после того, как все поставилось, инсталлируем базу данных<br /><blockquote><span style="font-weight:bold;"># /usr/local/bin/mysql_install_db </span></blockquote><br /><br />База проинсталлировалась вот по этому пути /var/db/mysql, теперь надо сменить владельца и группу для работы MySQL со своими же базами (вот тут всегда разногласия, кто-то говорит, что при инсталляции скрипт сам выполняет эти действия, кто-то что нет, так или иначе это всегда можно проверить в списке вывода #ls -l):<br /><br /><blockquote><span style="font-weight:bold;">#chown -R mysql /var/db/mysql</span></blockquote><br /><br /><blockquote><span style="font-weight:bold;">#chgrp -R mysql /var/db/mysql</span></blockquote><br /><br />Все, теперь можно пускать демона<br /><br /><blockquote><span style="font-weight:bold;">#/usr/local/bin/mysqld_safe -user=mysql &</span></blockquote><br /><br />наивные дурачки думают что это все... нееееэээт! впереди еще много чего интересного!<br /><br />Меняем пароль от рута<br /><br /><blockquote><span style="font-weight:bold;"># /usr/local/bin/mysqladmin -u root password 'new-password'</span></blockquote><br /><br />ну и для полного щастя ползем в /etc/rc.conf и прописываем там<br /><br /><blockquote><span style="font-weight:bold;">mysql_enable=”YES”</span></blockquote><br /><br />и перезагружаем системуzloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-39399813401130353392010-03-07T12:14:00.000-08:002018-12-17T23:33:35.306-08:00Монтирование папок по FTP протоколуCurlFtpFS – это маленькая програмка, которая дает нам прекрасную возможность присоединять папки с фтп серверов без использования графической оболочки.<br />
<br />
Features:<br />
<br />
* SSLv3 and TLSv1 support<br />
* connecting through tunneling HTTP proxies<br />
* automatically reconnection if the server times out<br />
* transform absolute symlinks to point back into the ftp file system<br />
<br />
Програмка базируется на FUSE и libcurl, и доступна в universe-репозитории.<br />
<br />
Для установки откроем терминал, и наберем следующие:<br />
<pre class="brush: bash">
sudo apt-get install curlftpfs
</pre>
<br />
Для монтирования ФТП-раздела к примеру в папку /media/ftp набираем в терминале следующие:<br />
<br />
curlftpfs ftp://[user]:[passwort]@ftpserver.net /media/ftp<br />
<br />
После чего можно редактировать, копировать, удалять содержимое раздела с соответствием прав.<br />
<br />
Отмонтировать раздел можно привычным umount:<br />
sudo umount /media/ftp
zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0tag:blogger.com,1999:blog-5996426160862961542.post-57924009060611127172010-02-28T07:03:00.000-08:002017-03-20T03:46:04.375-07:00Настройка VPN сервера в Ubuntu или DebianУстановим <b>VPN сервер</b>:<br />
Код:<br />
<blockquote>
sudo apt-get install pptpd ipx ipxripd</blockquote>
<br />
Настройка VPN сервера.<br />
Отредактируйте файл <span style="font-weight: bold;"><span style="font-style: italic;">/etc/ppp/pptpd-options</span></span><br />
<br />
Код:<br />
<blockquote>
name pptpd<br />
refuse-pap<br />
refuse-chap<br />
require-mschap<br />
require-mschap-v2<br />
require-mppe-128<br />
ms-dns 10.0.0.1<br />
ms-dns 10.0.0.2<br />
proxyarp<br />
nodefaultroute<br />
lock<br />
nobsdcomp<br />
#IPX (todo)<br />
ipx<br />
ipx-network 4<br />
ipx-node 1:0<br />
ipx-routing 2<br />
ipx-router-name Linux_router<br />
ipxcp-accept-remote</blockquote>
<br />
<br />
Отредактируйте файл <span style="font-style: italic;">/etc/pptpd.conf<span style="font-weight: bold;"></span></span><br />
<br />
Код:<br />
<br />
<blockquote>
option /etc/ppp/pptpd-options<br />
logwtmp<br />
localip 172.16.16.1<br />
remoteip 172.16.16.2-254</blockquote>
<br />
<br />
Теперь можно добавить пользователей, для этого отредактируйте файл <span style="font-weight: bold;">/etc/ppp/chap-secrets<span style="font-style: italic;"></span></span><br />
<br />
Код:<br />
<blockquote>
# Secrets for authentication using CHAP<br />
# client server secret IP addresses<br />
heiniken pptpd vladimir "*"</blockquote>
<br />
<br />
Мы добавили пользователя <span style="font-weight: bold;">heiniken</span> с паролем <span style="font-weight: bold;">vladimir</span> и с возможностью доступа с любого ip адреса.<br />
Если хотите с определённого адреса то вместо * впишите ип адрес.<br />
<br />
Перезапускаем VPN сервер<br />
<br />
Код:<br />
<blockquote>
/etc/init.d/pptpd restart</blockquote>
<br />
На этом настройка VPN сервера закончена, осталось настроить фаервол и форвардинг пакетов.<br />
<br />
Настройка фаервола<br />
<br />
Создадим простой скрипт фаервола в домашней директории /home:<br />
<br />
Код:<br />
<blockquote>
touch /home/vpn-firewall.sh<br />
chmod +X /home/vpn-firewall.sh<br />
gedit /home/vpn-firewall.sh</blockquote>
<br />
<br />
В открывшемся окне впишите:<br />
<br />
<blockquote>
#!/bin/sh<br />
echo 1 > /proc/sys/net/ipv4/ip_forward<br />
echo 1 > /proc/sys/net/ipv4/ip_dynaddr<br />
iptables --flush<br />
iptables --delete-chain<br />
iptables --table nat --flush<br />
iptables --table nat --delete-chain<br />
iptables -P FORWARD ACCEPT<br />
modprobe iptable_nat<br />
modprobe ip_conntrack_ftp<br />
modprobe ip_nat_ftp<br />
iptables --table nat --append POSTROUTING --out-interface ИМЯ ВАШЕГО ИСХОДЯЩЕГО ИНТЕРФЕЙСА например eth0 -j MASQUERADE<br />
echo vpn firewall loaded OK.</blockquote>
<br />
<br />
Пропишите этот скрипт в автозагрузку отредактировав файл /etc/rc.local<br />
Должно получится следующее:<br />
<br />
Код:<br />
<br />
<blockquote>
#!/bin/sh -e<br />
/home/vpn-firewall.sh<br />
exit 0</blockquote>
<br />
Запустите скрипт фаервола, он должен написать ”vpn firewall loaded OK.”<br />
<br />
Код:<br />
/home/vpn-firewall.sh<br />
<br />
На этом <b>настройка</b> закончена, можете настраивать windows клиенты, никаких особенных параметров не требуется, просто создаете подключение vpn с адресом вашего сервера, на вкладке ”Безопасность” нужно снять галочку с пункта ”Требуется шифрование данных (иначе отключаться)”, а так же логином и паролем которые вы вписали в конфигурационный файл.zloiiahttp://www.blogger.com/profile/15216790319242075714noreply@blogger.com0