Kini ọpọlọ ti ọmọ ile-iwe ti o kọ ẹkọ nipa agbaye kọnputa ti o lagbara lati?

O dara ọjọ.

Lẹhin ti pari kikọ iwe afọwọkọ miiran ni Bash, Mo rii pe ohun gbogbo yẹ ki o yatọ patapata, ṣugbọn ohun gbogbo ṣiṣẹ. Mo fẹ lati fi awọn ohun ti o buruju ati awọn crutches ti mo kowe han ọ lati le yanju iṣoro naa, ṣugbọn ko sibẹsibẹ ni kẹkẹ-ẹrù ti imọ. Ni gbolohun miran, a caricature ti siseto.

Nkan


Nkankan di pataki lati:

  • Ṣe afihan ọpọlọpọ awọn orin fun ọrọ naa, ayafi fun awọn onigun mẹrin
  • Rekoja ọpọlọpọ awọn rhymes ti meji ọrọ

Fun kini? O dara, iyẹn - ati pe iyẹn ni.
Tani ko mọ, orin onigun mẹrin (ni ọrọ sisọ ti o wọpọ - square) jẹ awọn ọrọ meji ti awọn lẹta meji ti o kẹhin ninu akọtọ naa ṣe deede, eyiti (nigbagbogbo, eyi nikan ni ohun) jẹ ki wọn jẹ orin. Fun apẹẹrẹ, awọn Roses jẹ tutu; taya - ọkọ ayọkẹlẹ. Lilo awọn onigun mẹrin ni isọdi ode oni kii ṣe ni pataki nipasẹ awọn eniyan, nitori ipilẹṣẹ wọn.

Ipinnu


O dabi fun mi pe ojutu ti o rọrun julọ ni lati kọ iwe afọwọkọ kan ni Bash ti o nlo monomono rhyme ti o ti wa tẹlẹ - HOST, eyiti o yan wọn ni akọkọ nipasẹ consonance, kii ṣe nipasẹ akọtọ. Iru ALEJO? Nitoripe ti o ba tọka si orukọ gidi ti aaye naa, wọn yoo sọ pe ipolowo ni. Kilode ti o ko tẹsiwaju lilo rẹ? Ni akọkọ, laibikita anfani rẹ ti yiyan awọn orin ti o da lori awọn kọnsonances, o tun ṣe agbejade awọn onigun mẹrin nigbagbogbo. Ni ẹẹkeji, o tun ni lati ronu pẹlu ọpọlọ rẹ, lo akoko yi pada laarin awọn taabu, ati agbara ti nṣe iranti awọn ọrọ ti o leralera ninu awọn atokọ lati wa orin kan fun awọn ọrọ meji.

Ngba awọn orin ti o lagbara

Kini mo mọ? Mo mọ nipa ohun elo naa wget, eyi ti o ṣe igbasilẹ oju-iwe ni URL ti a ti sọ tẹlẹ. O dara, jẹ ki a ṣe ibeere naa - a gba oju-iwe HTML kan ninu faili kan ti a npè ni pẹlu ọrọ orin. Fun apẹẹrẹ, jẹ ki a wa ọrọ naa “nibi”:

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

Ṣugbọn Mo nilo atokọ awọn ọrọ nikan, bawo ni MO ṣe le yọ ohun gbogbo kuro? A wo ati rii pe atokọ awọn ọrọ ti wa ni ọna kika, laibikita bi o ṣe le jẹ ajeji, ni irisi atokọ kan, ati pe awọn ọrọ wa ni awọn afi. . O dara, a ni ohun elo nla kan. sed - jẹ ki a kọ silẹ bi eleyi:

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

Ni akọkọ, lati faili ọrọ, yan awọn laini ti o ni aami - a gba opo ti awọn afi sofo ati awọn ila pẹlu awọn ọrọ. A yọ aami naa funrararẹ ati ipari rẹ - nibi awọn aami ida ọgọrun lo dipo awọn idinku nitori ninu tag funrararẹ o ti wa tẹlẹ idinku, kilode? sed ko ye o kan bit. Ati ohun gbogbo ni itanran pẹlu anfani. A yọ gbogbo awọn alafo kuro ninu faili naa, yọ awọn laini ofo kuro. Voila - atokọ ti a ti ṣetan ti awọn ọrọ.

Lati le yọ awọn ọrọ ti o kọ ni lilo awọn lẹta ti o kẹhin, yan awọn lẹta meji ti o kẹhin lati ọrọ atilẹba ki o ko atokọ naa kuro:

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

A wo, a gbiyanju - ohun gbogbo n ṣiṣẹ… nitorinaa, nibo ni atokọ fun ọrọ naa “mu”? Ati fun ọrọ naa "Mo n lọ"? Faili naa ṣofo! Ati pe eyi jẹ gbogbo nitori pe awọn ọrọ-ọrọ jẹ awọn ọrọ-ọrọ, ati pe a mọ ohun ti wọn ṣe si awọn ti o nfi ọrọ-ọrọ ṣe. Ọrọ-ọrọ ọrọ-ọrọ buru ju paapaa rhyme square, nitori ede Russian ni awọn ọrọ-ọrọ ti o pọ julọ, ati pe gbogbo wọn ni awọn ipari kanna, eyiti o jẹ idi ti wọn ko wa ni faili ikẹhin lẹhin ti ṣayẹwo awọn ipari.

Sibẹsibẹ, a ko yara. Fun ọrọ kọọkan kii ṣe awọn orin orin nikan, ṣugbọn awọn assonances, eyiti o dun nigbakan dara julọ ju rhyme - iyẹn ni idi ti wọn fi jẹ assonances (Assonance Faranse, lati Latin assono - Mo dun ni ibamu).

A gba assonances

Eyi ni ibi ti igbadun naa bẹrẹ: awọn asonances han ni URL ọtọtọ, ati ni oju-iwe kanna, nipa ṣiṣe iwe afọwọkọ kan, fifiranṣẹ ibeere HTTP ati gbigba esi kan. Bawo ni MO ṣe le sọ wget'Ṣe o tẹ bọtini naa? Sugbon ko si ona. Ibanujẹ.

Ṣe akiyesi pe URL ti o wa ninu laini n yipada ni ọna kan, Mo daakọ ohun ti o wa lẹhin ti o yipada si awọn assonances ati lẹẹmọ rẹ ni taabu aṣawakiri tuntun kan - awọn orin ti o lagbara ṣii. Kii ṣe iyẹn.

Ni pataki, Mo ro pe, ko yẹ ki o ṣe pataki si olupin boya iwe afọwọkọ ti o firanṣẹ ibeere naa ti ṣiṣẹ, tabi boya eniyan naa tẹ pẹlu ọwọ. Nitorina? Tani o mọ, jẹ ki a lọ ṣayẹwo rẹ.

Nibo ni lati firanṣẹ? Kini lati firanṣẹ? Ibeere HTTP si IP olupin, ohun kan wa bi GET... lẹhinna o wa nkankan HTTP / 1.1 ... A nilo lati wo ohun ti ẹrọ lilọ kiri ayelujara firanṣẹ ati nibo. Fi sori ẹrọ wireshark, wo ijabọ:

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Ó.

Eh...kini? Bẹẹni, a ni HTTPS. Kin ki nse? Ṣe ifilọlẹ ikọlu MITM kan si ararẹ bi? Bi o ṣe yẹ, ẹni ti o jiya funrararẹ yoo ran wa lọwọ.

Ni gbogbogbo, ti pinnu lati lọ kiri lori ẹrọ aṣawakiri naa, nikẹhin Mo rii ibeere naa funrararẹ ati adiresi naa. Lọ:

Ifọrọwọrọ pẹlu ebute

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.

Hey. Hehehe. Lootọ, iyẹn ni ohun ti Mo nireti nigbati fifiranṣẹ ibeere HTTP igboro si ibudo HTTPS kan. Ṣe o yẹ ki a encrypt bayi? Gbogbo ariwo yii pẹlu awọn bọtini RSA, lẹhinna pẹlu SHA256. Kilode, o wa OpenSSL fun iru ohun. O dara, a ti mọ kini lati ṣe, a yoo kan yọkuro Olutọka ati awọn aaye Kuki akọkọ - Mo ro pe wọn kii yoo kan ọrọ naa pupọ:

Ifọrọwọrọ pẹlu ebute

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

Kini ọpọlọ ti ọmọ ile-iwe ti o kọ ẹkọ nipa agbaye kọnputa ti o lagbara lati?

Kini eleyi, bura lori olupin naa? O dara, o kere ju wọn dahun mi 200 O dara, eyiti o tumọ si pe awọn kuki ati olutọkasi ko kan ohunkohun. Funmorawon ni gzip, sugbon nigba didakọ, ASCII ohun kikọ ti wa ni daakọ. Ni pato, o le yọ ila naa kuro Gbigba-iyipada. Ohun gbogbo dara - a gba iwe HTML kan, ni bayi pẹlu awọn assonances. Ṣugbọn nibi ni awọn ibeere meji: bii o ṣe le ṣiṣẹ OpenSSL ati gbe data si rẹ nipa lilo iwe afọwọkọ kan? Ati bii o ṣe le ka abajade ti o ba jẹ pe lẹhin gbigba esi a wa, bi o ti jẹ pe, ni “ikarahun OpenSSL”? Ti o ba le wa pẹlu nkan pẹlu keji, ṣugbọn pẹlu akọkọ ...

O dara pe o wa Habribi ti mo ti ka nipa awọn IwUlO reti, eyiti o ṣe adaṣe ilana ti ibaraenisepo pẹlu awọn eto ti o nireti ibaraenisepo eniyan. Nini a egbe jẹ ani diẹ wuni autoreti, ti o npese reti iwe afọwọkọ ti o da lori awọn iṣe rẹ. O dara, a ṣe ifilọlẹ, ṣe gbogbo eyi ati pe eyi ni iwe afọwọkọ ti o pari. Nikan o jẹ gidigidi tobi, ati gbogbo nitori OpenSSL ṣe afihan awọn iwe-ẹri, awọn bọtini, ati reti nduro abajade ti gbogbo eyi. Ṣe a nilo eyi? Rara. A yọ gbogbo itọsi akọkọ kuro, nlọ nikan laini isinmi ti o kẹhin 'r'. A tun yọ Aṣoju Olumulo ati Gba awọn aaye lati ibeere wa - wọn ko kan ohunkohun. Nitorinaa, jẹ ki a ṣe ifilọlẹ. Iwe afọwọkọ naa ti ṣiṣẹ, ṣugbọn nibo ni iwe HTML ti o niyelori wa? reti jẹ ẹ. Lati mu u tutọ, o nilo lati fi:

set results $expect_out(buffer)

ṣaaju ki opin iwe afọwọkọ naa - eyi ni bii abajade ti executable yoo ṣe kọ reti'om pipaṣẹ ati han loju iboju. Ni akojọpọ, nkan bii eyi:

expect'a akosile

#!/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

Sugbon ti o ni ko gbogbo! Gẹgẹbi o ti le rii, ni gbogbo awọn apẹẹrẹ URL ibeere naa jẹ aimi, ṣugbọn URL naa ni o ni iduro fun iru ọrọ wo ni yoo ni nkan ṣe pẹlu awọn asonances. Ati nitorinaa o wa ni pe a yoo wa ọrọ nigbagbogbo “% d0%b7%d0%b4%d0%b5%d1%81%d1%8c” ni ASCII tabi “nibi” ni UTF-8. Kin ki nse? Nitoribẹẹ, o kan ṣẹda iwe afọwọkọ tuntun ni gbogbo igba, awọn ọrẹ! Ko si mọ autoreti'Oh, ati pẹlu iranlọwọ iwoyi, nitori Ninu tuntun wa, ko si ohun ti o yipada ayafi ọrọ naa. Ati ki o pẹ ni iṣoro tuntun: bawo ni a ṣe le tumọ ọrọ kan ni oye lati Cyrillic sinu ọna kika URL? Ko si ohun pataki fun ebute boya. O dara, o dara, a le ṣe, otun? Le:

Wo ohun ti Mo le ṣe!

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')}

Lapapọ, a ni iwe afọwọkọ kan ti o yi ọrọ pada si ọrọ ASCII, ti o ṣẹda iwe afọwọkọ miiran ti o beere oju-iwe aaye kan pẹlu awọn asonances lati olupin nipasẹ OpenSSL. Ati lẹhinna a ṣe atunṣe abajade ti iwe afọwọkọ ti o kẹhin si faili kan ati, ni ọna aṣa atijọ, kọja nipasẹ rẹ "asẹ" afikun onigun mẹrin ati kọ wọn si faili naa.

Ikorita ti ọpọlọpọ awọn. Laini isalẹ

Lootọ, eyi ni deede ohun ti o fa awọn iṣoro ti o kere julọ. A ṣe awọn ilana ti o wa loke fun awọn ọrọ meji, lẹhinna lati awọn atokọ meji a ṣe afiwe ọrọ kọọkan pẹlu ọkọọkan ati pe ti o ba rii baramu, a gbejade. Bayi a ni iwe afọwọkọ kan ti o gba awọn ọrọ meji bi titẹ sii ati ṣafihan atokọ ti awọn ọrọ ti o rhyme pẹlu awọn mejeeji, ati paapaa ṣe akiyesi awọn asonances, ati gbogbo eyi laisi afọwọyi yipada laarin awọn taabu mẹrin ati awọn ọrọ iranti “nipasẹ oju” - gbogbo awọn ti a gba, ṣe iṣiro fun ati ki o danu laifọwọyi. Iyanu.

Ète ìwé yìí ni láti fi hàn pé bí ẹnì kan bá nílò ohun kan, yóò ṣe é lọ́nàkọnà. Aini doko pupọ, wiwọ, irako, ṣugbọn yoo ṣiṣẹ.

orisun: www.habr.com

Fi ọrọìwòye kun