这是一个常见的用例场景:您想广播一个公共WiFi网络供任何人使用,但是您有严格的要求,即只允许使用猫图像。好消息:您的Raspberry Pi是完美的 transmoggification 机器。感兴趣吗?继续阅读。
您需要什么
该项目的开始与几周前我们建造的洋葱路由器相同。首先,我们将Raspberry Pi变成标准的WiFi网络,然后在中间放置一个代理。代理将通过Perl脚本过滤帖子,该脚本将用TheCatAPI.com的cat GIF替换每个HTTP请求上的图像。看着困惑的用户既极度沮丧,又异常镇定。这是英国广播公司(BBC)的事后修改。
建立WiFi网络
由于本教程的这一部分与DIY洋葱路由器完全相同,请按照此处的说明进行操作。到安装Tor 的地步。
我们唯一需要做的小更改就是广播一个开放的WiFi网络,而不是使用WPA保护的网络。完成此处的设置后,请更改 /etc/hostapd/hostapd.conf ,并粘贴以下配置。重新开始应用更改。
interface=wlan0driver=nl80211ssid=Kittenshw_mode=gchannel=6auth_algs=1wmm_enabled=0
您现在应该在Raspberry Pi上广播一个可以公开访问的无线网络。本指南的其余部分将重点放在使有趣的事情发生上。
如果事情不起作用,请键入:
ifconfig -a
,然后在wlan0上查找IP地址。如果重新启动时未分配,请尝试以下操作:
sudo nano /etc/default/ifplugd
将以下行从:
INTERFACES="auto"HOTPLUG_INTERFACES="all"
更改为:
INTERFACES="eth0"HOTPLUG_INTERFACES="eth0"
重新启动,并验证您可以连接到WiFi网络,并访问Internet。
Squid代理和IPTable
从安装先决条件开始,然后创建一个新的路由表。
sudo apt-get install squid3 bridge-utils apache perlnano iptables.sh
粘贴以下内容:
iptables -t nat -A POSTROUTING -j MASQUERADEiptables -t nat -A PREROUTING -i wlan0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.42.1:3128iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
保存,然后退出。
sudo apt-get install squid3 bridge-utils apache perlnano iptables.sh
保存以下内容,然后退出。
chmod +x iptables.shsudo cp iptables.sh /etc/init.d/sudo update-rc.d iptables.sh start 99
忽略警告,仅表示我们未遵守某些Debian规则(但未破坏任何内容)。最后,我们仍然在引导时使用旧的 iptables 规则,因此请从 / etc / network / interfaces
up iptables-restore < /etc/iptables.ipv4.nat
中删除以下行(删除或注释)
然后重新启动。接下来,我们将删除默认的Squid代理配置,然后重新进行配置。
sudo rm /etc/squid3/squid.confsudo nano /etc/squid3/squid.conf
将以下内容粘贴到空白文件中:
cache_mgr picachemgr_passwd pi allredirect_program /home/pi/cats.placl manager proto cache_objectacl localhost src 127.0.0.1/32 ::1acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1acl localnet src 192.168.42.0/24 # RFC1918 possible internal networkacl SSL_ports port 443acl Safe_ports port 80 # httpacl Safe_ports port 21 # ftpacl Safe_ports port 443 # httpsacl Safe_ports port 70 # gopheracl Safe_ports port 210 # waisacl Safe_ports port 1025-65535 # unregistered portsacl Safe_ports port 280 # http-mgmtacl Safe_ports port 488 # gss-httpacl Safe_ports port 591 # filemakeracl Safe_ports port 777 # multiling httpacl CONNECT method CONNECThttp_access allow manager localhosthttp_access deny managerhttp_access deny !Safe_portshttp_access deny CONNECT !SSL_portshttp_access allow localnethttp_access allow localhosthttp_access deny allhttp_port 3128 transparentumask 022cache_mem 128 MBcache_dir ufs /var/spool/squid3 1500 16 256coredump_dir /var/spool/squid3refresh_pattern ^ftp: 1440 20% 10080refresh_pattern ^gopher: 1440 0% 1440refresh_pattern -i (/cgi-bin/|\?) 0 0% 0refresh_pattern . 0 20% 4320
保存并退出。使用以下命令初始化缓存目录,然后编辑用于分类所有图像的脚本:
sudo squid3 -znano /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.plsudo mkdir /var/www/imagessudo chmod 777 /var/www/imagessudo usermod -a -G www-data proxysudo chown www-data:www-data /var/wwwsudo chown www-data:www-data /var/www/imagestouch /tmp/cats.logchmod 777 /tmp/cats.log
您可以随时通过以下方式尾随日志:
tail -f /tmp/cats.log
尝试登录Pinterest,然后突然间,所有这些愚蠢的DIY盆栽植物项目和男士时装精选都将变得更具吸引力。
如果您想倒置图片(为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结合!
标签: Raspberry Pi Wi-Fi