Как сделать сеть WiFi, которая передает только изображения кошек с Raspberry Pi

Это типичный сценарий использования: вы хотите транслировать общедоступную сеть Wi-Fi для всех пользователей, но у вас есть строгие требования, разрешающие только изображения кошек. Хорошие новости: ваш Raspberry Pi — идеальная машина для трансмоггификации. Заинтригованный? Читать дальше.

Что вам нужно

  • Raspberry Pi модель B (новичок в Raspberry Pi? Вот все, что нужно знать новичку

    в видео форме)

  • SD-карта 4 ГБ или больше
  • сетевой кабель
  • Совместимый адаптер WiFi
  • Кабель питания MicroUSB и адаптер

Теория

Этот проект начинается с Onion Router

мы построили несколько недель назад. Сначала мы сделаем Raspberry Pi в стандартной сети Wi-Fi, а затем разместим посредник. Прокси-сервер будет фильтровать сообщения с помощью сценария Perl, который будет заменять изображения в каждом HTTP-запросе GIF-файлами cat от TheCatAPI.com. Посмотрите, как озадаченные пользователи сильно расстроены и в то же время странно успокоены. Вот BBC, пост-кошачьи модификации.

пост-кошка-би-си

Создание сети WiFi

Так как эта часть урока точно такая же, как и у DIY Onion Router

Пожалуйста, следуйте инструкциям там до точки Установить Tor.

Единственное небольшое изменение, которое нам нужно сделать, — это широковещательная открытая сеть WiFi, а не защищенная с помощью WPA. После того, как вы выполнили настройку, измените /etc/hostapd/hostapd.conf, вместо этого вставьте в следующие конфигурации. Перезапустите, чтобы применить изменения.

interface=wlan0
driver=nl80211
ssid=Kittens
hw_mode=g
channel=6
auth_algs=1
wmm_enabled=0

Теперь у вас должна быть беспроводная сеть, транслируемая на вашем Raspberry Pi, которая является общедоступной. Остальная часть этого руководства будет посвящена интересным вещам.

Если что-то не работает, введите:

ifconfig -a

и найдите IP-адрес на wlan0. Если ни один не назначается при перезагрузке, попробуйте следующее:

sudo nano /etc/default/ifplugd

Измените следующие строки из:

INTERFACES="auto"
HOTPLUG_INTERFACES="all"

чтобы:

INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"

Перезагрузитесь и убедитесь, что вы можете подключиться к сети WiFi и получить доступ к Интернету.

Squid Proxy и IPTables

Начните с установки необходимых компонентов, затем создайте новую таблицу маршрутизации. Мы будем обслуживать изображения с Raspberry Pi позже, поэтому нам также понадобится веб-сервер Apache.

sudo apt-get install squid3 bridge-utils apache perl
nano iptables.sh

Вставьте следующее:

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.42.1:3128
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

Сохраните, затем выйдите.

chmod +x iptables.sh
sudo cp iptables.sh /etc/init.d/
sudo update-rc.d iptables.sh start 99

iptable-ш-ошибка

Игнорируйте предупреждения, это просто означает, что мы не выполнили некоторые правила Debian (но ничего не нарушаем). Наконец, у нас все еще есть старые правила iptables при загрузке, поэтому удалите следующую строку из / и т.д. / сеть / интерфейсы

up iptables-restore < /etc/iptables.ipv4.nat

(Удалить или закомментировать)

Затем перезагрузите. Далее мы удалим конфигурацию прокси-сервера Squid по умолчанию и создадим новую.

sudo rm /etc/squid3/squid.conf
sudo nano /etc/squid3/squid.conf

Вставьте следующее в пустой файл:

cache_mgr pi
cachemgr_passwd pi all
redirect_program /home/pi/cats.pl
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 192.168.42.0/24 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128 transparent
umask 022
cache_mem 128 MB
cache_dir ufs /var/spool/squid3 1500 16 256
coredump_dir /var/spool/squid3
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

Сохранить и выйти. Инициализируйте каталоги кеша следующей командой, затем отредактируйте скрипт, который мы будем использовать для сопоставления всех изображений:

sudo squid3 -z
nano /home/pi/cats.pl

Вставить в:

#!/usr/bin/perl
$|=1;
$count = 0;
$pid = $$;
open (DEBUG, '>>/tmp/cats.log');
autoflush DEBUG 1;
print DEBUG "########################################################################\n";
while () {
chomp $_;
if (m/nosquid/) {
print DEBUG "Input NOSQUID: $url\n";
print "$_\n";
print DEBUG "Output NOSQUID: $_\n";
}
elsif ($_ =~ /(.*\.jpg)/i) {
$url = $1;
print DEBUG "Input: $url\n";
system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.gif", "http://thecatapi.com/api/images/get?format=src&type=gif&nosquid");
chmod 0777,"/var/www/images/$pid-$count.gif";
print "http://127.0.0.1/images/$pid-$count.gif\n";
}
elsif ($_ =~ /(.*\.gif)/i) {
$url = $1;
print DEBUG "Input: $url\n";
system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.gif", "http://thecatapi.com/api/images/get?format=src&type=gif&nosquid");
chmod 0777,"/var/www/images/$pid-$count.gif";
print "http://127.0.0.1/images/$pid-$count.gif\n";
}
elsif ($_ =~ /(.*\.png)/i) {
$url = $1;
print DEBUG "Input: $url\n";
system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.gif", "http://thecatapi.com/api/images/get?format=src&type=gif&nosquid");
chmod 0777,"/var/www/images/$pid-$count.gif";
print "http://127.0.0.1/images/$pid-$count.gif\n";
}
elsif ($_ =~ /(.*\.jpeg)/i) {
$url = $1;
print DEBUG "Input: $url\n";
system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.gif", "http://thecatapi.com/api/images/get?format=src&type=gif&nosquid");
chmod 0777,"/var/www/images/$pid-$count.gif";
print "http://127.0.0.1/images/$pid-$count.gif\n";
}
else {
print "$_\n";
}
$count++;
}

Сделайте сценарий исполняемым, и мы также должны создать несколько каталогов для работы с ним.

sudo chmod +x cats.pl
sudo mkdir /var/www/images
sudo chmod 777 /var/www/images
sudo usermod -a -G www-data proxy
sudo chown www-data:www-data /var/www
sudo chown www-data:www-data /var/www/images
touch /tmp/cats.log
chmod 777 /tmp/cats.log

Вы можете в любое время записать в журнал, используя:

tail -f /tmp/cats.log

Хвост-журнал

Попробуйте войти в Pinterest, и вдруг все эти глупые проекты DIY в горшках и выбор мужской моды станут намного привлекательнее.

лучше Pinterest

Если вы предпочитаете показывать перевернутые изображения (кредит на оригинальный скрипт для Ex-Parrot, я изменил его только для устранения некоторых ошибок разрешений), создайте upsidedown.pl и вставьте следующее.

#!/usr/bin/perl
$|=1;
$count = 0;
$pid = $$;
while () {
chomp $_;
if ($_ =~ /(.*\.jpg)/i) {
$url = $1;
system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.jpg", "$url");
system("/usr/bin/mogrify", "-flip","/var/www/images/$pid-$count.jpg");
chmod 0777,"/var/www/images/$pid-$count.jpg";
print "http://127.0.0.1/images/$pid-$count.jpg\n";
}
elsif ($_ =~ /(.*\.gif)/i) {
$url = $1;
system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.gif", "$url");
system("/usr/bin/mogrify", "-flip","/var/www/images/$pid-$count.gif");
chmod 0777,"/var/www/images/$pid-$count.gif";
print "http://127.0.0.1/images/$pid-$count.gif\n";
}
elsif ($_ =~ /(.*\.png)/i) {
$url = $1;
system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.png", "$url");
system("/usr/bin/mogrify", "-flip","/var/www/images/$pid-$count.png");
chmod 0777,"/var/www/images/$pid-$count.png";
print "http://127.0.0.1/images/$pid-$count.png\n";
}
elsif ($_ =~ /(.*\.jpeg)/i) {
$url = $1;
system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.jpeg", "$url");
system("/usr/bin/mogrify", "-flip","/var/www/images/$pid-$count.jpeg");
chmod 0777,"/var/www/images/$pid-$count.jpeg";
print "http://127.0.0.1/images/$pid-$count.jpeg\n";
}
else {
print "$_\n";;
}
$count++;
}

Выполните другие шаги, описанные выше, изменив имя файла, чтобы сделать скрипт исполняемым, и измените конфигурацию Squid так, чтобы она указывала на upsidedown.pl вместо cats.pl. Наконец, вам нужно перезапустить Squid с помощью:

sudo service squid3 restart

Результаты довольно впечатляющие в любом случае. Если вы вносите какие-либо изменения или улучшаете эти сценарии с помощью дополнительных функций, пожалуйста, дайте мне в комментариях добавить ссылку на ваш скрипт в Pastebin.

Нужно что-то более сложное? Вы можете попробовать объединить этот проект с Raspberry Pi NAS.

или всегда включенный торрент-загрузчик

!

Ссылка на основную публикацию