Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
####### # # E-scripts on http servers, clients, cgis, etc. # # Note 1: use the eev command (defined in eev.el) and the # ee alias (in my .zshrc) to execute parts of this file. # Executing this file as a whole makes no sense. # An introduction to eev can be found here: # # (find-eev-quick-intro) # http://angg.twu.net/eev-intros/find-eev-quick-intro.html # # Note 2: be VERY careful and make sure you understand what # you're doing. # # Note 3: If you use a shell other than zsh things like |& # and the for loops may not work. # # Note 4: I always run as root. # # Note 5: some parts are too old and don't work anymore. Some # never worked. # # Note 6: the definitions for the find-xxxfile commands are on my # .emacs. # # Note 7: if you see a strange command check my .zshrc -- it may # be defined there as a function or an alias. # # Note 8: the sections without dates are always older than the # sections with dates. # # This file is at <http://angg.twu.net/e/http.e> # or at <http://angg.twu.net/e/http.e.html>. # See also <http://angg.twu.net/emacs.html>, # <http://angg.twu.net/.emacs[.html]>, # <http://angg.twu.net/.zshrc[.html]>, # <http://angg.twu.net/escripts.html>, # and <http://angg.twu.net/>. # ####### # «.simple-http-servers» (to "simple-http-servers") # «.python3-http.server» (to "python3-http.server") # «.rfcs-about-http» (to "rfcs-about-http") # «.test.cgi» (to "test.cgi") # «.cgi-test» (to "cgi-test") # «.wiki_apache» (to "wiki_apache") # «.boa_install» (to "boa_install") # «.boa_secondary» (to "boa_secondary") # «.telnet» (to "telnet") # «.expect_http_client» (to "expect_http_client") # «.eeg_http_client» (to "eeg_http_client") # «.dustmote» (to "dustmote") # «.tcl_http» (to "tcl_http") # «.cgipm-2.56» (to "cgipm-2.56") # «.runtmpcgi» (to "runtmpcgi") # «.disguise-user-agent» (to "disguise-user-agent") # «.cgi_specs» (to "cgi_specs") # «.file_upload» (to "file_upload") # «.file_upload_php3» (to "file_upload_php3") # «.pingless» (to "pingless") # «.squid» (to "squid") # «.thttpd» (to "thttpd") # «.thttpd-compile» (to "thttpd-compile") # «.thttpd-cgis-anywhere» (to "thttpd-cgis-anywhere") # «.cgis-at-zumbi-with-htaccess» (to "cgis-at-zumbi-with-htaccess") # «.nginx» (to "nginx") # «.sinatra» (to "sinatra") # «.perldancer» (to "perldancer") # «.lighthttpd» (to "lighthttpd") # «.http-insecure» (to "http-insecure") # «.HSTS» (to "HSTS") # (find-zsh "installeddebs | sort | grep http") # (find-zsh "availabledebs | sort | grep http") https://wiki.debian.org/WebServers https://en.wikipedia.org/wiki/Comparison_of_web_server_software ##### # # simple-http-servers # 2019apr16 # ##### # «simple-http-servers» (to ".simple-http-servers") # https://unix.stackexchange.com/questions/32182/simple-command-line-http-server # https://gist.githubusercontent.com/sumpygump/9908417/raw/5fa991fda103d0b7a0c38512394a83ccada9ad6c/nweb23.c nweb23.c # https://gist.github.com/willurd/5720255 Big list of http static server one-liners # https://www.reddit.com/r/webdev/comments/1fs45z/list_of_ad_hoc_http_server_oneliners/ Python 2.x $ python -m SimpleHTTPServer 8000 Python 3.x $ python -m http.server 8000 busybox httpd $ busybox httpd -f -p 8000 Credit: lvm # (find-angg ".zshrc" "makepageindexhtmls") # (find-angg "LUA/lstoindexhtml.lua") * (eepitch-shell2) * (eepitch-kill) * (eepitch-shell2) http://0.0.0.0:8000/ ##### # # python3 http.server # 2019apr17 # ##### # «python3-http.server» (to ".python3-http.server") # (find-sh "apt-file search python | grep http | grep server | tee /tmp/ophs") # (find-esgrep "grep --color -nH -e server.py /tmp/ophs") # (find-status "libpython3.5-stdlib") # (find-vldifile "libpython3.5-stdlib:amd64.list") # (find-vldifile "libpython3.5-stdlib:amd64.list" "http/server.py") # (find-udfile "libpython3.5-stdlib/") # (find-fline "/usr/lib/python3.5/http/server.py") # (find-multiwindow-intro "that restarts both targets") # (find-efunction 'find-wget) * (eepitch '(shell "http-server")) * (eepitch-kill) * (eepitch '(shell "http-server")) cd ~/TH/R/ python3 -m http.server 8002 * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd ~/TH/R/ lstoindexhtml_lua_dirs $(find .* * -type d | sort) * (find-3EE '(eepitch-shell) '(eepitch-shell2)) * (eepitch-shell2) cd ~/TH/R/ python3 -m http.server 8000 * (eepitch-shell) # (find-angg ".emacs" "find-wget") cd ~/TH/R/ date | tee ~/TH/R/2019.1-TD/test lstoindexhtml_lua_dirs $(find 2019.1-TD -type d | sort) wget -q -O - http://0.0.0.0:8000/2019.1-TD/test ##### # # RFCs about HTTP # 2004dec18 # ##### # «rfcs-about-http» (to ".rfcs-about-http") # HTTP/1.0: (find-rfcfile "rfc1945.txt") # HTTP/1.1: (find-rfcfile "rfc2068.txt") # (find-rfcfile "rfc2068.txt" "\n19.5 Changes from HTTP/1.0") ##### # # test.cgi # 2007jul20 # ##### # Test if CGIs are working with a simple sh-based CGI. # «test.cgi» (to ".test.cgi") ##### # # Test if CGIs are working (with "showquery") # 1999aug09 # ##### # «cgi-test» (to ".cgi-test") # For an easier test: # (to "runtmpcgi") apti data-dumper #* cd /usr/lib/cgi-bin/ heredoc showquery.cgi -m 0755 <<'---' #!/usr/bin/perl # (find-pl5file "CGI.pm") print "Content-type: text/plain\n\n"; use CGI; my $query = new CGI; use Data::Dumper; sub pdump { print "\n$_[0]:\n", Dumper($_[1]); } pdump "ENV", \%ENV; pdump "query", $query; --- lynx $LH/cgi-bin/showquery.cgi'?foo=bar' cd /usr/lib/cgi-bin/ cp -v showquery.cgi /var/www/ lynx $LH/showquery.cgi'?foo=bar' ##### # # wikits as CGIs - short version # 1999aug09 # ##### # «wiki_apache» (to ".wiki_apache") # (find-es "tcl" "wikit_cgi") cd /var/www/ rm -Rv wikit/ mkdir wikit/ chmod 777 wikit cd /var/www/wikit/ gzip -cd < $S/http/mini.net/cgi-bin/wikit.gz > wikit_cgi chmod 777 wikit_cgi heredoc wikit.cgi -m 0555 <<'---' #!/bin/sh exec /usr/local/bin/tclkit /var/www/wikit/wikit_cgi wikit --- chmod 755 wikit.cgi lynx $LH/wikit/wikit.cgi # (find-fline "/var/log/apache/") # (find-fline "/var/log/apache/error.log") # Comparing conffiles: # cd /o/etc/apache for i in *.conf; do echo "\n\n $i:\n"; diff $i /etc/apache/$i; done # (find-vldifile "" "apache.") # (find-vldifile "apache.list") # (find-fline "/usr/doc/apache/") # A question: if the default for apache is "inetd", shouldn't the port # 80 be trapped by inetd? # Notes on debugging: # # (find-fline "/etc/init.d/apache") # (find-fline "/usr/sbin/apachectl") bash -x /etc/init.d/apache restart bash -x /usr/sbin/apachectl start echo $? /usr/sbin/apache echo $? strace -f -o ~/s /usr/sbin/apache laf /o/etc/apache/ laf /etc/apache/ --> Restarting apache daemon... failed. # (find-fline "/etc/apache/httpd.conf") Uau! #### # # boa (potato) # 2001jun20 # #### # «boa_install» (to ".boa_install") #* apti boa # (find-vldifile "" "boa") # (find-fline "/etc/init.d/boa") # (find-fline "/sbin/start-stop-daemon" "Usage:") # To keep apache as the default web server: cd /etc find init* rc* | egrep 'boa|apache' find rc* | egrep 'S..boa' rm -v $(find rc* | egrep 'S..boa') /etc/init.d/boa stop /etc/init.d/apache start sleep 1 lsof | grep :www #* # To let boa be the web server (temporarily): /etc/init.d/apache stop /etc/init.d/boa start lsof | grep :www #* # (find-es "general" "lsof-2.0.37") ##### # # boa as a secondary web server (slink) # 99oct24 # ##### # «boa_secondary» (to ".boa_secondary") # See the previous chunk for installation on Debian. # (find-vldifile "boa.list") # (find-fline "/usr/doc/boa/") # (find-fline "/usr/doc/boa/docs/") # (find-fline "/usr/doc/boa/examples/") # (find-fline "/etc/boa/boa.conf") egrep '^#?[A-Z]' /etc/boa/boa.conf |& tee ~/o rm -Rv /tmp/boa/ mkdir /tmp/boa/ cat > /tmp/boa/boa.conf <<'---' Port 8080 User nobody Group nogroup ServerAdmin root@localhost ErrorLog /var/log/boa/error_log AccessLog /var/log/boa/access_log #VerboseCGILogs #ServerName www.your.org.here #VirtualHost #DocumentRoot /var/www DocumentRoot /tmp/boa UserDir public_html DirectoryIndex index.html DirectoryMaker /usr/lib/cgi-bin/boa_indexer KeepAliveMax 100 KeepAliveTimeout 10 MimeTypes /etc/mime.types DefaultType text/plain #AddType application/x-httpd-cgi cgi Alias /doc /usr/doc ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ --- kill $(pidof boa) boa -c /tmp/boa lsof | grep boa cp ~/TH/L/*.html /tmp/boa/ lynx http://angg:8080/ lynx http://angg:8080/cgi-bin/ # lynx complains with "Bad partial reference! Stripping lead dots.". Why? # (find-es "lynx" "lynx_patch_turbo") # (find-fline "/var/log/boa/") # (find-fline "~/EXPECT/") # (find-fline "~/EXPECT/httpc1") cd /usr/src/lynx-2.8.1/ agrep 'Bad partial reference! Stripping lead dots' $(find *) agrep 'BAD_PARTIAL_REFERENCE' $(find *) # (find-lynxfile "src/LYCharUtils.c" "BAD_PARTIAL_REFERENCE") # «expect_http_client» (to ".expect_http_client") expect -c ' spawn telnet 127.0.0.1 8080 expect -re "Connected to \[^\n\]+\n\[^\n\]+\n" send "GET /index.html HTTP/1.0\n\n" expect eof ' ##### # # http via telnet # 2014nov01 # ##### # «telnet» (to ".telnet") # http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol # http://upload.wikimedia.org/wikipedia/commons/c/c6/Http_request_telnet_ubuntu.png * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) telnet 127.0.0.1 80 GET /index.html HTTP/1.0 ##### # # eeg http client # 2004dec18 # ##### # «eeg_http_client» (to ".eeg_http_client") #* cat > $EEG <<'%%%' GET /index.html HTTP/1.0 %%% eeg telnet 127.0.0.1 80 #* cat > $EEG <<'%%%' GET /index.html HTTP/1.0 %%% eeg netcat -q 0 localhost 80 #* ###### # # boa - recompiling # 2000jul03 # ###### # (code-c-d "boa" "/usr/src/boa-0.94.8.1/") pdsc $SDEBIAN/dists/potato/main/source/web/boa_0.94.8.1-1.dsc cd /usr/src/boa-0.94.8.1/ cd src/ ./configure |& tee ../oc # make |& tee ../om make CFLAGS="-O" LDFLAGS="-static" |& tee ../om ldd boa ldd boa_indexer laf boa boa_indexer # (find-boafile "om") # (find-node "(gcc)Link Options" "-static") # (find-node "(make)Catalogue of Rules") # (find-es "make") #* rm -Rv /tmp/boa/ mkdir /tmp/boa/ cd /usr/src/boa-0.94.8.1/src/ cp -v boa boa_indexer /tmp/boa/ cd /tmp/boa/ cat > boa.conf <<'---' Port 8080 User root Group root ErrorLog /dev/null AccessLog /dev/null DocumentRoot /tmp DirectoryMaker /tmp/boa/boa_indexer KeepAliveMax 100 KeepAliveTimeout 10 MimeTypes /dev/null # MimeTypes /etc/mime.types DefaultType text/plain # AddType application/x-httpd-cgi cgi # Alias /doc /usr/doc # ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ --- kill $(pidof boa) /tmp/boa/boa -c /tmp/boa #* lsof | grep boa lynx http://127.0.0.1:8080/ # (find-boafile "") # (find-boafile "odrb") # (find-boafile "debian/rules") # (find-boafile "src/") ##### # # dustmote, a minimal http server written in Tcl (~120 lines) # 99nov15 # ##### # «dustmote» (to ".dustmote") # (find-es "tcl" "dustmote") # Update (2007): I tried the Simtel URL below, it no longer works. # The code of dustmote can be fetched from here: # http://wiki.tcl.tk/4333 # The rest of this block is very old. # ftp://ftp.unicamp.br/pub/simtelnet/win95/webbrows/dumo104.zip #* rm -Rv /usr/src/dustmote/ mkdir /usr/src/dustmote/ cd /usr/src/dustmote/ unzip -a $S/ftp/ftp.unicamp.br/pub/simtelnet/win95/webbrows/dumo104.zip cd /usr/src/dustmote/ cp dustmote.tcl dm8080.tcl ed dm8080.tcl <<'---' 141c vwait forEver . 1,3c set root /home/root/TH/L set default index.html set port 8080 ;# port 80 is used by Apache . w --- # (find-fline "/usr/src/dustmote/") # diff -e dustmote.tcl dm8080.tcl # Its indentation is ugly; use Emacs to fix it. # (progn (find-fline "/usr/src/dustmote/dustmote.tcl") (indent-region (point-min) (point-max) nil) (save-buffer)) # (find-fline "/usr/src/dustmote/dm8080.tcl") #* tclsh dm8080.tcl |& tee /tmp/odm lsof | grep tcl lynx http://127.0.0.1:8080/ ##### # # http from Tcl # 99nov14 # ##### # «tcl_http» (to ".tcl_http") # (find-es "page" "angelfire") # (find-fline "~/TCL/httpwiki") # (find-fline "$S/http/www.angelfire.com/cgi-bin/") expect -c ' set afpasswd xxxxxxxx ;# PUT THE PASSWORD HERE! # package require http 1.0 set answer [http_data [http_get \ http://www.angelfire.com/cgi-bin/bedit -query [http_formatQuery \ fullhpd or2/edrx \ password $afpasswd \ login submit]]] puts $answer ' |& tee /tmp/bedit.html # (find-fline "$S/http/www.angelfire.com/cgi-bin/") # (find-fline "$S/http/www.angelfire.com/cgi-bin/bedit.html") # (find-fline "$S/http/www.angelfire.com/cgi-bin/bedit") # (find-fline "/tmp/bedit.html") lynx /tmp/bedit.html lynx $S/http/www.angelfire.com/cgi-bin/bedit.html cp $S/http/www.angelfire.com/cgi-bin/bedit.html /tmp/bedit.html getforms < /tmp/bedit.html diff /tmp/bedit.html $S/http/www.angelfire.com/cgi-bin/bedit.html agrep -i input /tmp/bedit.html agrep -i input $S/http/www.angelfire.com/cgi-bin/bedit.html cat $S/http/www.angelfire.com/cgi-bin/bedit.html | \ expect -c ' while {[gets stdin li]!=-1} { if {[regexp {<input [^>]*>} $li inp]} { puts $inp } } ' | \ tee ~/o # (find-fline "~/.zshrc" "getforms") getforms < $S/http/www.angelfire.com/cgi-bin/bedit ##### # # Sending and receiving files # 99nov16 # ##### # (find-es "tcl" "cgi.tcl") # (find-cgitclfile "") # (find-cgitclfile "example/") # (find-cgitclfile "example/upload.cgi") # (find-cgitclfile "example/uploadbin.cgi") # (find-fline "/usr/lib/tcl8.0/") # (find-fline "/usr/lib/tcl8.0/http1.0/") # (find-fline "/usr/lib/tcl8.0/http2.0/") # (find-fline "/tmp/upload.html") # (find-fline "/usr/src/dustmote/dm8080.tcl") cd /tmp/ wget -O upload.html http://127.0.0.1/cgi-tcl/upload.cgi edrxnetscape http://127.0.0.1/cgi-tcl/ ##### # # Logging everything on a http connection # 99nov16 # ##### # set info [fconfigure $socketChannel -peername] # set peerName [lindex $info 1] # set when [clock format [clock seconds] ] # puts stdout "$peerName $when" # (find-fline "~/EXPECT/eheaders") # stty -icanon min 1 echo expect -c ' proc answer {socketChannel ip port} { puts "$ip $port" spawn -open $socketChannel interact puts "(closed)" } socket -server answer 8080 vwait forEver ' # On other window: expect -c ' spawn telnet 127.0.0.1 8080 interact timeout 10 exit ' # On still another window: kill $(pidof telnet) ##### # # CGI.pm-2.56 # ##### # «cgipm-2.56» (to ".cgipm-2.56") rm -Rv /usr/src/CGI.pm-2.56/ cd /usr/src/ tar -xvzf $SCPAN/authors/id/LDS/CGI.pm-2.56.tar.gz cd /usr/src/CGI.pm-2.56/ # (code-c-d "cgipm" "/usr/src/CGI.pm-2.56/") # (find-cgipmfile "") ##### # # Basic cgis # 2000may18 # ##### # «runtmpcgi» (to ".runtmpcgi") # (find-angg ".zshrc" "runtmpcgi") # Here's a quick way to test simple cgis: we write them to a scratch # cgi file, set the permission bits and call the scratch cgi via http. # This turned out to be very useful, so I created some functions and # aliases on my .zshrc that do most of the job and reduce the noise. # There are links to them below. # Just print the date, the pwd and the uids/gids. #* cat > /usr/lib/cgi-bin/tmp.cgi <<'--%%--' #!/usr/bin/perl print "Content-type: text/plain\n\n"; print "date: ", `date`; print "pwd: ", `pwd`; print "id: ", `id`; --%%-- chmod 755 /usr/lib/cgi-bin/tmp.cgi echo; wget -q -O - http://127.0.0.1/cgi-bin/tmp.cgi #* # Same, but using a shell function. # (find-angg ".zshrc" "runtmpcgi") runtmpcgi <<'---' #!/usr/bin/perl print "Content-type: text/plain\n\n"; print "date: ", `date`; print "pwd: ", `pwd`; print "id: ", `id`; --- #* # Same, but with even less explicit noise. runperltcgi <<'---' print "date: ", `date`; print "pwd: ", `pwd`; print "id: ", `id`; --- #* # Now that the noise is gone we can use cgis that would look too ugly # otherwise. This one inspects the environment and argv, first on a # plain call, then on an "isindex" call. # (find-es "perl" "Data::Dumper") runperltcgi '?foo=bar' <<'---' use Data::Dumper;sub pdump{print"\n $_[0] =\n",Dumper($_[1]);} pdump '%ENV', \%ENV; pdump '$0', $0; pdump '@ARGV', \@ARGV; --- #---- tmpcgi '?foo' #* # «disguise-user-agent» (to ".disguise-user-agent") # (find-es "wget" "user-agent") # (find-angg ".zshrc" "psne") # A way to use wget on places that won't allow "spiders": # lynx http://127.0.0.1/cgi-bin/tmp.cgi lynx -source http://127.0.0.1/cgi-bin/tmp.cgi > /tmp/ol wget -O - -U 'Lynx/2.8.3rel.1 libwww-FM/2.14' \ http://127.0.0.1/cgi-bin/tmp.cgi \ | tee /tmp/ow l /tmp/o{l,w} #* ##### # # More (?) notes on runperltcgi # 2000aug01 # ##### # (find-es "http" "runtmpcgi") # (find-angg ".zshrc" "runtmpcgi") http://127.0.0.1/cgi-bin/tmp.cgi$1 #* runperltcgi '?foo' <<'---' use Data::Dumper; sub pdump{print"\n $_[0] =\n",Dumper($_[1]);} use CGI; my $query = new CGI; pdump '%ENV', \%ENV; pdump '$0', $0; pdump '@ARGV', \@ARGV; pdump "query", $query; --- #* settmpcgi <<'---' pdump '%ENV', \%ENV; pdump '$0', $0; pdump '@ARGV', \@ARGV; pdump "query", $query; --- tmpcgi '?foo=bar' tmpcgi cat /usr/lib/cgi-bin/tmp.cgi /usr/lib/cgi-bin/tmp.cgi foo=bar #* ##### # # CGI specs # 2000may18 # ##### # «cgi_specs» (to ".cgi_specs") # (code-c-d "apadoc" "/usr/doc/apache/manual/") # (find-apadocfile "misc/FAQ.html" "CGI specification") # (code-c-d "cgispec" "$S/http/hoohoo.ncsa.uiuc.edu/cgi/") # (find-cgispecfile "") # (find-cgispecw3 "overview.html") # (find-cgispecw3 "interface.html") # (find-cgispecw3 "env.html") # (find-cgispecw3 "cl.html") # (find-cgispecw3 "in.html") # (find-cgispecw3 "out.html") # (find-apadocfile "") # (find-apadocfile "cgi_path.html") # (find-apadocfile "handler.html") # (find-apadocfile "suexec.html") ##### # # File upload # 2000jul29 # ##### # «file_upload» (to ".file_upload") # Note that I'm using cgi.tcl to check if the uploads are ok; use this # link for how to install it: # (find-es "tcl" "cgi.tcl") # (find-es "perl" "Data::Dumper") # (find-es "emacs" "w3") # (w3-fetch "http://localhost/cgi-tcl/") # (find-fline "/var/www/cgi-tcl/") # (find-fline "/var/www/cgi-tcl/upload.cgi") # (find-fline "/var/www/cgi-tcl/uploadbin.cgi") # (eeman "3pm HTTP::Message") # (eeman "3pm HTTP::Request") # (eeman "3pm HTTP::Request::Common") # (eeman "3pm LWP::UserAgent") # (find-pl5file "HTTP/Message.pm" "previous content is returned.") # (find-pl5file "HTTP/Request.pm" "Instances of this class are usually") # (find-pl5file "HTTP/Request/Common.pm" "Sending my") # (find-pl5file "LWP/UserAgent.pm" "new LWP::UserAgent") #* cat > /tmp/p <<'---' use Data::Dumper; sub pdump { print "\n $_[0] =\n", Dumper($_[1]); } use LWP::UserAgent; use HTTP::Request::Common; $ua = LWP::UserAgent->new; $request = POST 'http://127.0.0.1/cgi-tcl/upload.cgi', Content_Type => 'form-data', Content => [ name => 'n...a...m...e', file1 => ["$ENV{HOME}/.bashrc"], ]; $response = $ua->request($request); $content = $response->content(); # pdump '$post', $post; # pdump '$response', $response; print $content; --- perl /tmp/p \ | unhtml \ | uniq #* cat > /tmp/p <<'---' use Data::Dumper; sub pdump { print "\n $_[0] =\n", Dumper($_[1]); } use LWP::UserAgent; use HTTP::Request::Common; print LWP::UserAgent -> new -> request(POST 'http://127.0.0.1/cgi-tcl/upload.cgi', Content_Type => 'form-data', Content => [ foo => 'bar', file1 => ["$ENV{HOME}/.bashrc"], ]) -> content(); --- perl /tmp/p \ | unhtml \ | uniq #* ##### # # File upload and php3 # 2000aug01 # ##### # «file_upload_php3» (to ".file_upload_php3") # (find-angg ".zshrc" "perl_http_request") #* cat > /var/www/tmp.php3 <<'---' <? phpinfo() ?> --- perl_http_request > /tmp/o.html <<'---' POST 'http://127.0.0.1/tmp.php3', Content_Type => 'form-data', Content => [ foo => 'bar', file1 => ["$ENV{HOME}/.bashrc"], ] --- lynx /tmp/o.html # Search for "PHP Variables". #* ##### # # Testing if I can connect to a site that refuses ping # 2000aug30 # ##### # «pingless» (to ".pingless") #* function trytoconnect () { expect -c " spawn telnet $1 $2 expect {Connected to} {puts ok} timeout {puts argh} eof {puts argh} " } # Ok: trytoconnect angg.twu.net 80 # Argh: trytoconnect sucuri.mat.puc-rio.br 80 trytoconnect nonexistent.comm 80 #* ##### # # squid # 2000dec01 # ##### # «squid» (to ".squid") apti squid squid-cgi squidclient urlredir aptrm squid squid-cgi squidclient urlredir # I once got this error while using my ISP: ERROR The requested URL could not be retrieved While trying to retrieve the URL: http://www.linuxmagic.org/ The following error was encountered: Connection Failed The system returned: (111) Connection refused The remote host or network may be down. Please try the request again. Your cache administrator is suporte@inx.com.br. Generated Sun, 26 Nov 2000 04:32:46 GMT by leblon.inx.com.br (Squid/2.3.STABLE3) # (find-status "squid") # (find-status "squid-cgi") # (find-status "squidclient") # (find-status "urlredir") # (find-vldifile "squid-cgi.list") # (find-vldifile "squid.list") # (find-vldifile "squidclient.list") # (find-vldifile "urlredir.list") # (find-fline "/usr/doc/squid-cgi/") # (find-fline "/usr/doc/squid/") # (find-fline "/usr/doc/squidclient/") # (find-fline "/usr/doc/urlredir/") # (find-fline "/usr/doc/squid/HTTP-codes.txt.gz") # (find-w3 "/usr/doc/squid/FAQ.html") # (find-w3 "/usr/doc/squid/FAQ-17.html#ss17.2") # (eeman "1 squidclient") lynx http://127.0.0.1/cgi-bin/cachemgr.cgi ##### # # Connecting to a Tcl interpreter # 2001nov10 # ##### # (find-fline "~/bin/mytcl") # (find-fline "/usr/lib/cgi-bin/") # (find-fline "/usr/lib/cgi-bin/tcltest") # (find-angg ".zshrc" "heredoc") # (find-man "3tcl read") # (find-man "3tcl while") # (find-es "tcl-cipsga" "gets") #* mytcl -c ' while {gets li; puts "%$li"} ' #* mytcl -c 'puts [gets stdin li]; puts <$li>' #* echo foo | mytcl -c 'puts [gets stdin li]; puts <$li>' echo -n foo | mytcl -c 'puts [gets stdin li]; puts <$li>' echo -n | mytcl -c 'puts [gets stdin li]; puts <$li>' #* heredoc /usr/lib/cgi-bin/tcltest -m 755 <<'---' #!/bin/sh \ exec tclsh "$0" "$@" source $env(HOME)/TCL/inc.tcl ##### # # thttpd # 2005oct21 # ##### # «thttpd» (to ".thttpd") # (find-status "thttpd") # (find-vldifile "thttpd.list") # (find-udfile "thttpd/") # (find-fline "/etc/thttpd/thttpd.conf") # (find-man "8 thttpd") # (find-man "8 thttpd" "daemon") # (find-man "8 thttpd" "*.cgi") # I prefer to use -c "*" and make every executable file a cgi. # (find-rfcfile "rfc1945.txt" "Content-Type: text/html") # http://www.acme.com/software/thttpd/ # # The eepitched server: # (find-esgrep "grep -nH -e thttpd *.e") # (find-es "ppp" "thttpd") #* kill -9 $(cat ~/usrc/varwww/pid); sleep 1 rm -Rv ~/usrc/varwww/ mkdir -p ~/usrc/varwww/ cd ~/usrc/varwww/ /usr/sbin/thttpd -p 8080 \ -d ~/usrc/varwww/ \ -i ~/usrc/varwww/pid \ -nor -nos -c "*" -l /dev/null \ -T iso-8859-1 cd ~/usrc/varwww/ date > 1 date > 2 cat > plain.cgi <<'%%%' #!/bin/sh echo -e "Content-type: text/plain\n" echo -e "<html>\n<head><title>T</title></head>\n<body>B</body>\n</html>" %%% chmod 755 plain.cgi cat > html.cgi <<'%%%' #!/bin/sh echo -e "Content-type: text/html\n" echo -e "<html>\n<head><title>T</title></head>\n<body>B</body>\n</html>" %%% chmod 755 html.cgi cat > html-foo <<'%%%' #!/bin/sh echo -e "Content-type: text/html\n" echo -e "<html>\n<head><title>T</title></head>\n<body>B</body>\n</html>" %%% chmod 755 html-foo laf /proc/$(cat ~/usrc/varwww/pid)/ #* # (find-fline "~/usrc/varwww/") # Test: # http://127.0.0.1:8080/ # (find-status "thttpd-util") # (find-vldifile "thttpd-util.list") # (find-udfile "thttpd-util/") ##### # # thttpd from the source # 2005oct27 # ##### # «thttpd-compile» (to ".thttpd-compile") # http://www.acme.com/software/thttpd/ # http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz #* rm -Rfv ~/usrc/thttpd-2.25b/ tar -C ~/usrc/ -xvzf \ $S/http/www.acme.com/software/thttpd/thttpd-2.25b.tar.gz cd ~/usrc/thttpd-2.25b/ ./configure 2>&1 | tee oc make 2>&1 | tee om #* # (code-c-d "thttpd" "~/usrc/thttpd-2.25b/") # (find-thttpdfile "") ##### # # thttpd: allowing cgis anywhere # 2006jun23 # ##### # «thttpd-cgis-anywhere» (to ".thttpd-cgis-anywhere") # (code-c-d "thttpd" "~/usrc/thttpd-2.25b/" :grep) # (find-thttpdfile "") # (find-thttpdgrep "grep -niH -e cgipat $(find *)") # (find-thttpdfile "thttpd.c" "\"cgipat\"") # (find-thttpdgrep "grep -niH -e cgi_pattern $(find *)") # (find-thttpdfile "cgi-src/ssi.c" "match( cgi_pattern, filename )") # (find-thttpdfile "config.h" "Allow any program ending with a .cgi") # (find-thttpdfile "config.h" "** meaning any string at all") # (find-man "8 thttpd" "Don't do explicit symbolic link checking") # (find-fline "$ASROOT/etc/thttpd/thttpd.conf") # (find-sh0 "sudo chown edrx:edrx /etc/thttpd/thttpd.conf") # (find-fline "/etc/thttpd/thttpd.conf") #chroot nosymlink cgipat=**.cgi sudo /etc/init.d/thttpd restart # (find-sh0 "sudo /etc/init.d/thttpd restart") # (find-sh0 "sudo killall thttpd") # (find-sh0 "ps ax | grep thttpd") ##### # # cgis at zumbi (htaccess) # 2008jan03 # ##### # «cgis-at-zumbi-with-htaccess» (to ".cgis-at-zumbi-with-htaccess") # (find-fline "~/LOGS/2008jan03.omnisys") # (find-netbsdman "ksh" " -f " "noglob") # http://httpd.apache.org/docs/1.3/howto/htaccess.html * (eepitch-zumbi) * (eepitch-kill) * (eepitch-zumbi) cat ~andre/public_html/.htaccess cd ~/public_html/ cat > .htaccess <<'%%%' Options +ExecCGI AddHandler cgi-script .cgi %%% cd ~/public_html/tmp/ cat > test.cgi <<'%%%' #!/bin/sh # echo -e "Content-type: text/html\n\n" echo -e "Content-type: text/plain\n\n" set %%% chmod 755 test.cgi # http://zumbi/~edrx/tmp/ # http://zumbi/~edrx/tmp/test.cgi wget -q -O - http://zumbi/~edrx/tmp/test.cgi Last login: Thu Jan 3 12:35:14 2008 from meskita zumbi - netbsd $ $ cat ~andre/public_html/.htaccess Options +ExecCGI AddHandler cgi-script .cgi $ $ cd ~/public_html/ $ cat > .htaccess <<'%%%' > Options +ExecCGI > AddHandler cgi-script .cgi > %%% $ $ cd ~/public_html/tmp/ $ cat > test.cgi <<'%%%' > #!/bin/sh > # echo -e "Content-type: text/html\n\n" > echo -e "Content-type: text/plain\n\n" > set > %%% $ chmod 755 test.cgi $ $ # http://zumbi/~edrx/tmp/ $ # http://zumbi/~edrx/tmp/test.cgi $ $ wget -q -O - http://zumbi/~edrx/tmp/test.cgi DOCUMENT_ROOT=/omnisys/www/htdocs GATEWAY_INTERFACE=CGI/1.1 HTTP_ACCEPT='*/*' HTTP_CONNECTION=Keep-Alive HTTP_HOST=zumbi HTTP_USER_AGENT=Wget/1.10.2 IFS=' ' OPTIND=1 PATH=/sbin:/bin:/usr/sbin:/usr/bin PS1='$ ' PS2='> ' PS4='+ ' QUERY_STRING= REMOTE_ADDR=192.168.51.181 REMOTE_PORT=65525 REQUEST_METHOD=GET REQUEST_URI='/~edrx/tmp/test.cgi' SCRIPT_FILENAME=/home/edrx/public_html/tmp/test.cgi SCRIPT_NAME='/~edrx/tmp/test.cgi' SERVER_ADDR=192.168.51.181 SERVER_ADMIN=andre.luiz@omnisys.com.br SERVER_NAME=zumbi SERVER_PORT=80 SERVER_PROTOCOL=HTTP/1.0 SERVER_SIGNATURE='<ADDRESS>Apache/1.3.37 Server at zumbi Port 80</ADDRESS> ' SERVER_SOFTWARE='Apache/1.3.37 (Unix)' UNIQUE_ID=R3zyscCoM7UAAAPUBYE $ ##### # # nginx # 2009sep29 # ##### # «nginx» (to ".nginx") # (find-status "nginx") # (find-vldifile "nginx.list") # (find-udfile "nginx/") # (find-fline "/var/www/nginx-default/") # (find-fline "/etc/nginx/") # https://github.com/chaoslawful/lua-nginx-module # http://www.londonlua.org/scripting_nginx_with_lua/index.html ##### # # Sinatra and PerlDancer # 2011jan03 # ##### # «sinatra» (to ".sinatra") # «perldancer» (to ".perldancer") # http://www.sinatrarb.com/intro # http://perldancer.org/ ##### # # lighthttpd # 2013feb02 # ##### # «lighthttpd» (to ".lighthttpd") # (find-es "git" "git-instaweb") # (find-status "lighttpd") # (find-vldifile "lighttpd.list") # (find-udfile "lighttpd/") # (find-fline "/etc/lighttpd/") # (find-fline "/etc/init.d/lighttpd") # (find-fline "/etc/rc2.d/" "S20lighttpd") Which script adds the S20lighttpd to /etc/rc2.d/ ? ##### # # http-insecure # 2021jan02 # ##### # «http-insecure» (to ".http-insecure") # https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security # https://www.cloudflare.com/learning/ssl/why-use-https/ # https://www.securitymetrics.com/blog/are-http-websites-insecure # (find-fline "~/LOGS/2021jan02.emacs") # (find-fline "~/LOGS/2021jan02.emacs" "hsts") * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) # curl -v https://www.youtube.com 2>&1 | tee /tmp/o curl -v https://www.youtube.com 2>&1 | grep -i strict-transport-security # (find-fline "/tmp/o") strict-transport-security: max-age=31536000 ##### # # HSTS # 2021jan08 # ##### # «HSTS» (to ".HSTS") # (find-node "(wget)HTTPS (SSL/TLS) Options") # (find-node "(wget)HTTPS (SSL/TLS) Options" "HSTS") # (find-node "(wget)HTTPS (SSL/TLS) Options" "--no-hsts") # (find-man "1 lwp-request") # (find-status "libwww-perl") # (find-vldifile "libwww-perl.list") # (find-vldifile "libwww-perl.list" "/usr/bin/lwp-request") # (find-udfile "libwww-perl/") https://medium.com/free-code-camp/web-application-security-understanding-the-browser-5305ed2f1dac https://odino.org/wasec-understanding-the-browser/ # Local Variables: # coding: utf-8-unix # End: