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 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ẹ
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