Naon otak murid diajar ngeunaan dunya komputer sanggup?

Alus poé.

Sanggeus réngsé nulis naskah sejen dina Bash, abdi sadar yen sagalana kudu sagemblengna béda, tapi sagalana jalan. Abdi hoyong nunjukkeun anjeun naon obscenities na crutches I wrote guna ngajawab masalah, tapi teu acan gaduh gerbong pangaweruh. Dina basa sejen, karikatur programming.

tugas


Aya anu diperlukeun pikeun:

  • Ditémbongkeun loba rhymes pikeun kecap, iwal kuadrat
  • Meuntas loba rhymes dua kecap

Kanggo naon? Nya, éta - sareng éta.
Saha anu teu terang, rhyme kuadrat (dina parlance umum - pasagi) nyaéta dua kecap anu dua hurup panungtungan dina ejaan coincide, nu (sering, ieu hijina hal) ngajadikeun eta rhyme. Contona, mawar téh tiris pisan; ban - mobil. Pamakéan kuadrat dina versification modern teu utamana disatujuan ku jalma, alatan primitiveness maranéhanana.

kaputusan


Sigana mah yén leyuran pangbasajanna nya éta nulis naskah dina Bash anu ngagunakeun generator rhyme geus aya - HOST, nu utamana milih aranjeunna ku consonance, teu ku ejaan. Naon jenis HOST? Kusabab upami anjeun nunjukkeun nami asli situs éta, aranjeunna bakal nyarios yén éta mangrupikeun iklan. Naha henteu neraskeun ngagunakeunana? Kahiji, sanajan kaunggulan na milih rhymes dumasar kana konsonans, anjeunna masih mindeng ngahasilkeun kuadrat. Kadua, anjeun masih kedah mikir sareng uteuk anjeun, nyéépkeun waktos ngalih antara tab, sareng énergi ngapalkeun kecap-kecap anu diulang dina daptar pikeun milarian sajak pikeun dua kecap.

Meunang rhymes kuat

Naon anu kuring terang? Kuring terang ngeunaan utiliti wget, nu ngundeur kaca dina URL nu ditangtukeun. Oké, hayu urang ngaéksekusi pamundut - urang meunang kaca HTML dina file ngaranna kalawan kecap rhyming. Contona, hayu urang milarian kecap "di dieu":

wget https://HOST/rifma/здесь

Tapi kuring ngan ukur peryogi daptar kecap, kumaha kuring tiasa ngaleungitkeun sadayana anu sanés? Kami ningali sareng ningali yén daptar kecap diformat, henteu paduli kumaha anéhna, dina bentuk daptar, sareng kecap-kecapna aya dina tag . Nya, urang gaduh utilitas anu saé. séd - hayu urang nyerat sapertos kieu:

cat $word | grep '<li>' | sed -e "s%<li>%%" | sed -e "s%</li>%%" | sed -e "s/ //g" | sed -e "/^$/d" 1> $word

Kahiji, urang milih garis tina file kecap nu ngandung tag - urang meunang kebat kosong tag jeung garis kalawan kecap. Urang hapus tag sorangan sareng panutupanana - di dieu simbol persen dianggo tibatan garis miring sabab tag sorangan parantos ngagaduhan garis miring, naha éta séd teu ngarti anjeun saeutik. Jeung sagalana rupa kalawan dipikaresep. Urang miceun kabeh spasi tina file, miceun garis kosong. Voila - daptar siap-dijieun kecap.

Pikeun mupus kecap anu sajak ngagunakeun hurup panungtung, pilih dua hurup panungtung tina kecap asli sareng hapus daptarna:

squad=${word:((${#word}-2)):2}
cat $word | sed -e "/.$squad$/d" 1> $word

Urang tingali, urang coba - sagalana jalan ... jadi, dimana daptar kecap "ulin"? Jeung kecap "Abdi bade"? Koropakna kosong! Sareng ieu sadayana kusabab kecap-kecap ieu mangrupikeun kecap pagawéan, sareng urang terang naon anu dilakukeun pikeun jalma anu sajak sareng kecap pagawéan. Kecap pagawéan rhyme leuwih goreng ti malah pasagi rhyme, sabab basa Rusia boga paling kecap gawe, sarta sakabéh éta boga tuntung sarua, naha maranéhna teu dina file final sanggeus mariksa tuntung.

Najan kitu, urang teu puguh. Pikeun unggal kecap aya lain ngan rhymes, tapi ogé asonansi, nu kadang disada leuwih hadé ti rhyme - éta sababna asonansi (Assonance Perancis, tina Latin assono - I sora dina Ngepaskeun).

Urang meunang asonansi

Ieu dimana kasenangan dimimitian: asonansi muncul dina URL anu misah, sareng dina halaman anu sami, ku ngalaksanakeun naskah, ngirim pamundut HTTP sareng nampi réspon. Kumaha kuring bisa ngomong wget'Naha anjeun pencét tombol? Tapi euweuh cara. Sedih.

Noticing yén URL dina garis ieu kumaha bae ngarobah, abdi nyalin naon aya sanggeus pindah ka asonansi jeung nempelkeun eta dina tab browser anyar - strong rhymes opened up . Henteu éta.

Intina, kuring panginten, éta henteu masalah pikeun server naha naskah anu ngirimkeun pamundut éta dilaksanakeun, atanapi naha jalma éta ngetik ku panangan. Janten? Anu terang, hayu urang pariksa deui.

Ka mana ngirim? ngirim naon? HTTP pamundut ka IP server, aya hal kawas GET ... lajeng aya hal HTTP / 1.1 ... Urang kudu ningali naon browser ngirimkeun na dimana. Masang wireshark, tingali lalulintas:

0040 37 5d a3 84 27 e7 fb 13 6d 93 ed cd 56 04 9d 82 7]£.'çû.m.íÍV...
0050 32 7c fb 67 46 71 dd 36 4d 42 3d f3 62 1b e0 ad 2|ûgFqÝ6MB=ób.à.
0060 ef 87 be 05 6a f9 e1 01 41 fc 25 5b c0 77 d3 94 ï.¾.jùá.Aü%[ÀwÓ.

Emh... naon? Oh enya, urang gaduh HTTPS. Naon anu kedah dilakukeun? Ngajalankeun serangan MITM ka diri anjeun? Ideally, korban sorangan bakal nulungan urang.

Sacara umum, sanggeus mutuskeun pikeun internetan browser nu, tungtungna kuring manggihan pamundut sorangan jeung addressee nu. indit:

Dialog jeung terminal

telnet IP PORT
Trying IP...
Connected to IP.
Escape character is '^]'.
GET /rifma/%D0%BC%D0%B0%D1%82%D1%8C?mode=block&type=asn HTTP/1.1
Host: HOST
Accept-Language: en-US,en;q=0.5
X-Requested-With: XMLHttpRequest
Connection: close

HTTP/1.1 400 Bad Request
Server: nginx/1.8.0
Date: Sun, 03 Nov 2019 20:06:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 270
Connection: close

<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.8.0</center>
</body>
</html>
Connection closed by foreign host.

Héy. Hehehe. Mémang, éta anu kuring ngarepkeun nalika ngirim pamundut HTTP bulistir ka port HTTPS. Naha urang kedah énkripsi ayeuna? Sadayana masalah ieu sareng konci RSA, teras sareng SHA256. Naha, aya OpenSSL pikeun hal saperti. Nya, urang parantos terang naon anu kedah dilakukeun, urang badé ngahapus heula kolom Referer sareng Cookie - Jigana éta moal mangaruhan pisan:

Dialog jeung terminal

openssl s_client -connect IP:PORT
{Всякие ключи, сертификаты}
GET /rifma/%D0%B7%D0%B4%D0%B5%D1%81%D1%8C?mode=block&type=asn HTTP/1.1
Host: HOST
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/javascript,text/html,application/xml,text/xml,*/*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
X-Requested-With: XMLHttpRequest
Connection: keep-alive

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK
Date: Sun, 03 Nov 2019 20:34:33 GMT
Set-Cookie: COOKIE
X-Powered-By: Phusion Passenger 5.0.16
Server: nginx/1.8.0 + Phusion Passenger 5.0.16
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Cache-Control: no-cache
Strict-Transport-Security: max-age=31536000
Content-Security-Policy: block-all-mixed-content
Content-Encoding: gzip

Naon otak murid diajar ngeunaan dunya komputer sanggup?

Naon ieu, sumpah di server? Nya, sahenteuna aranjeunna ngajawab kuring 200 OKÉ, anu hartosna cookies sareng referrer henteu mangaruhan nanaon. Komprési nyaéta gzip, tapi nalika nyalin, karakter ASCII disalin. Persis, anjeun tiasa ngahapus garis Nampa-encoding. Sadayana henteu kunanaon - urang nampi dokumen HTML, ayeuna kalayan asonansi. Tapi ieu aya dua patarosan: kumaha ngajalankeun OpenSSL sareng nransfer data ka dinya nganggo naskah? Sareng kumaha cara maca kaluaran upami saatos nampi réspon kami tetep, saolah-olah, dina "cangkang" OpenSSL? Upami anjeun tiasa mendakan anu kadua, tapi anu kahiji ...

Ieu alus mun aya Habrdimana kuring maca ngeunaan utiliti ngaharepkeun, nu ngajadikeun otomatis prosés interaksi jeung program nu nyangka interaksi manusa. Gaduh tim malah leuwih pikaresepeun autoexpected, ngahasilkeun ngaharepkeun naskah dumasar kana lampah anjeun. Nya, urang ngaluncurkeunana, laksanakeun sadayana ieu sareng ieu naskah réngsé. Ngan anjeunna pisan badag, sarta sakabeh sabab OpenSSL mintonkeun sertipikat, kenop, jeung ngaharepkeun ngantosan kaluaran sadaya ieu. Naha urang peryogi ieu? No. Urang miceun sakabéh ajakan kahiji, ngan nyésakeun putus garis panungtungan 'r'. Kami ogé ngahapus widang Pamaké-Agén sareng Nampa tina pamundut kami - aranjeunna henteu mangaruhan nanaon. Janten, hayu urang ngaluncurkeun. Skripna dieksekusi, tapi dimana dokumen HTML anu berharga? ngaharepkeun dahar eta. Pikeun ngajantenkeun anjeunna nyiduh kaluar, anjeun kedah nempatkeun:

set results $expect_out(buffer)

sateuacan akhir naskah - ieu kumaha kaluaran anu tiasa dieksekusi bakal ditulis ngaharepkeun'Om paréntah sarta dipintonkeun dina layar. Kasimpulanana, sapertos kieu:

ngarepkeun naskah

#!/usr/bin/expect -f

set timeout -1
spawn openssl s_client -connect IP:PORT
match_max 100000
expect -exact "
---r
"
send -- "GET /rifma/%d0%b7%d0%b4%d0%b5%d1%81%d1%8c?mode=block&type=asn HTTP/1.1rHost: HOSTrAccept-Language: en-US,en;q=0.5rX-Requested-With: XMLHttpRequestrConnection: close"
expect -exact "GET /rifma/%d0%b7%d0%b4%d0%b5%d1%81%d1%8c?mode=block&type=asn HTTP/1.1r
Host: HOSTr
Accept-Language: en-US,en;q=0.5r
X-Requested-With: XMLHttpRequestr
Connection: close"
send -- "r"
set results $expect_out(buffer)
expect -exact "r
"
send -- "r"
expect eof

Tapi éta henteu sadayana! Sakumaha anjeun tiasa tingali, dina sagala conto URL pamundut éta statik, tapi éta URL nu jawab kecap nu bakal pakait sareng asonansi. Sareng tétéla yén urang bakal terus milarian kecap "%d0%b7%d0%b4%d0%b5%d1%81%d1%8c" dina ASCII atanapi "di dieu" dina UTF-8. Naon anu kedah dilakukeun? Tangtu, ngan saukur ngahasilkeun naskah anyar unggal waktu, babaturan! Henteu deui autoexpected'om, sareng kalayan bantosan gema, sabab Dina anyar urang, euweuh robah iwal kecap. Sareng panjang hirup masalah anyar: kumaha urang tiasa narjamahkeun kecap tina Sirilik kana format URL? Henteu aya anu khusus pikeun terminal ogé. Nya, henteu kunanaon, urang tiasa ngalakukeun éta, henteu? Tiasa:

Tingali naon anu kuring tiasa laksanakeun!

function furl {
furl=$(echo "$word" | sed 's:А:%d0%90:g;s:Б:%d0%91:g;s:В:%d0%92:g;s:Г:%d0%93:g;s:Д:%d0%94:g;s:Е:%d0%95:g;s:Ж:%d0%96:g;s:З:%d0%97:g;s:И:%d0%98:g;s:Й:%d0%99:g;s:К:%d0%9a:g;s:Л:%d0%9b:g;s:М:%d0%9c:g;s:Н:%d0%9d:g;s:О:%d0%9e:g;s:П:%d0%9f:g;s:Р:%d0%a0:g;s:С:%d0%a1:g;s:Т:%d0%a2:g;s:У:%d0%a3:g;s:Ф:%d0%a4:g;s:Х:%d0%a5:g;s:Ц:%d0%a6:g;s:Ч:%d0%a7:g;s:Ш:%d0%a8:g;s:Щ:%d0%a9:g;s:Ъ:%d0%aa:g;s:Ы:%d0%ab:g;s:Ь:%d0%ac:g;s:Э:%d0%ad:g;s:Ю:%d0%ae:g;s:Я:%d0%af:g;s:а:%d0%b0:g;s:б:%d0%b1:g;s:в:%d0%b2:g;s:г:%d0%b3:g;s:д:%d0%b4:g;s:е:%d0%b5:g;s:ж:%d0%b6:g;s:з:%d0%b7:g;s:и:%d0%b8:g;s:й:%d0%b9:g;s:к:%d0%ba:g;s:л:%d0%bb:g;s:м:%d0%bc:g;s:н:%d0%bd:g;s:о:%d0%be:g;s:п:%d0%bf:g;s:р:%d1%80:g;s:с:%d1%81:g;s:т:%d1%82:g;s:у:%d1%83:g;s:ф:%d1%84:g;s:х:%d1%85:g;s:ц:%d1%86:g;s:ч:%d1%87:g;s:ш:%d1%88:g;s:щ:%d1%89:g;s:ъ:%d1%8a:g;s:ы:%d1%8b:g;s:ь:%d1%8c:g;s:э:%d1%8d:g;s:ю:%d1%8e:g;s:я:%d1%8f:g;s:ё:%d1%91:g;s:Ё:%d0%81:g')}

Dina total, urang boga Aksara nu ngarobah hiji kecap kana téks ASCII, generating Aksara sejen nu requests kaca situs kalawan asonansi ti server via OpenSSL. Teras we alihan kaluaran skrip anu terakhir ka file sareng, ku cara baheula, ngalangkunganana "saringan" kuadrat tambahan jeung nulis kana file.

Parapatan loba. Garis handap

Sabenerna, ieu mangrupikeun anu nyababkeun masalah pangsaeutikna. Kami ngalaksanakeun prosedur di luhur pikeun dua kecap, teras tina dua daptar kami ngabandingkeun unggal kecap sareng masing-masing sareng upami aya patandingan, kami kaluarkeunana. Ayeuna kami gaduh naskah anu nyandak dua kecap salaku input sareng nampilkeun daptar kecap anu sajak sareng duanana, sareng ogé tumut kana asonansi akun, sareng sadaya ieu tanpa sacara manual ngagentos antara opat tab sareng nginget kecap "ku panon" - sadayana dikumpulkeun, diitung. keur jeung dipiceun otomatis. Endah.

Tujuan tina ieu publikasi nyaéta pikeun nunjukkeun yén upami hiji jalma peryogi naon waé, anjeunna bakal ngalakukeun éta waé. Pisan teu epektip, bengkung, creepy, tapi bakal jalan.

sumber: www.habr.com

Tambahkeun komentar