Menene kwakwalwar ɗalibi da ke koyo game da duniyar kwamfuta ke iya iyawa?

Kyakkyawan lokaci na rana.

Bayan kammala rubuta wani rubutun a Bash, na gane cewa komai ya kamata ya bambanta, amma komai ya yi aiki. Ina so in nuna muku irin abubuwan batsa da sandunan da na rubuta don magance matsalar, amma har yanzu ban sami keken ilimi ba. A wasu kalmomin, a caricature na shirye-shirye.

Manufar


Wani abu ya zama dole don:

  • Nuna waƙoƙi da yawa don kalmar, ban da murabba'ai
  • Ketare yawancin waƙoƙin kalmomi biyu

Don me? To, shi ke nan - kuma shi ke nan.
Wane ne bai sani ba, waƙar murabba'i (a cikin harshen gama gari - murabba'i) kalmomi biyu ne waɗanda haruffa biyu na ƙarshe a cikin rubutun suka yi daidai, wanda (sau da yawa, wannan shine kawai abu) ya sa su zama waƙa. Misali, wardi suna da sanyi; taya - mota. Amfani da murabba'i a cikin versification na zamani mutane ba su yarda da su musamman ba, saboda kasancewarsu.

yanke shawara


Ga alama mafi sauƙi mafi sauƙi shine a rubuta rubutun a cikin Bash wanda ke amfani da janareta na waƙoƙin da ya riga ya kasance - HOST, wanda da farko yana zabar su ta hanyar yarda, ba ta hanyar rubutu ba. Wane irin HOST? Domin idan ka nuna ainihin sunan shafin sai su ce talla ne. Me zai hana a ci gaba da amfani da shi? Na farko, duk da fa'idar da ya yi na zabar wakoki bisa la'akari, har yanzu yakan samar da murabba'i. Na biyu, har yanzu dole ne ku yi tunani tare da kwakwalwar ku, ku ciyar da lokaci don canzawa tsakanin shafuka, da kuzari don haddace maimaita kalmomi a cikin jeri don nemo waƙar kalmomi biyu.

Samun waƙoƙi masu ƙarfi

Me na sani? Na san game da amfani wget, wanda ke zazzage shafin a ƙayyadadden URL. To, bari mu aiwatar da buƙatar - mun sami shafin HTML a cikin fayil mai suna tare da kalma mai raɗaɗi. Misali, bari mu nemo kalmar “nan”:

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

Amma jerin kalmomi kawai nake buƙata, ta yaya zan iya kawar da komai? Mun duba sai mu ga an tsara jerin kalmomi, komai bakon abu, a cikin sigar jeri, kuma kalmomin suna cikin tags. . To, muna da babban amfani. sed - Bari mu rubuta shi kamar haka:

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

Da farko, daga fayil ɗin kalma, zaɓi layin da ke ɗauke da alamar - muna samun tarin alamun fanko da layi tare da kalmomi. Muna cire alamar da kanta da kuma na rufewa - a nan ana amfani da alamomin kashi maimakon slash saboda a cikin alamar kanta an riga an yi sara, me yasa? sed baya fahimtar ku kadan. Kuma komai yana da kyau tare da sha'awa. Muna cire duk sarari daga fayil ɗin, cire layin da ba komai. Voila - jerin kalmomi da aka shirya.

Domin cire kalmomin da suka yi amfani da haruffan ƙarshe, zaɓi haruffa biyu na ƙarshe daga ainihin kalmar kuma share jerin:

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

Muna duba, muna gwada - duk abin yana aiki ... don haka, ina jerin kalmar "wasa"? Kuma ga kalmar "Zan tafi"? Fayil babu komai! Kuma wannan duk saboda waɗannan kalmomin fi’ili ne, kuma mun san abin da suke yi wa waɗanda suke waƙa da fi’ili. Waƙar fi’ili ya fi ko da square rhyme, domin yaren Rasha ya fi fi’ili, kuma dukansu suna da irin wannan karshen, shi ya sa ba su kasance a cikin fayil na karshe bayan duba karshen.

Duk da haka, ba mu cikin gaggawa. Ga kowace kalma akwai ba kawai waƙoƙi ba, har ma da alƙawarin, wanda wasu lokuta suna da kyau fiye da rhyme - shi ya sa suke zama assonances (Faransa assonance, daga Latin assono - Ina sauti cikin jituwa).

Muna samun assonances

Wannan shine inda nishaɗin ya fara: assonances suna bayyana a wani URL daban, kuma akan shafi ɗaya, ta aiwatar da rubutun, aika buƙatar HTTP da karɓar amsa. Yaya zan iya cewa wget' Kuna danna maballin? Amma babu wata hanya. Abin baƙin ciki.

Da yake lura da cewa URL ɗin da ke cikin layin yana canzawa ko ta yaya, na kwafi abin da ke wurin bayan na canza zuwa alƙawarin na liƙa shi a cikin sabon shafin burauza - ƙaƙƙarfan waƙoƙin ya buɗe. Ba haka ba.

Ainihin, na yi tunani, bai kamata ya shafi uwar garken ba ko an aiwatar da rubutun da ya aika da buƙatar, ko kuma mutumin ya rubuta ta da hannu. Don haka? Wa ya sani, mu je duba shi.

Ina zan aika? Me za a aika? HTTP bukatar zuwa uwar garken IP, akwai wani abu kamar GET... to akwai wani abu HTTP/1.1... Muna bukatar mu ga abin da browser aika da kuma inda. Shigar wireshark, duba zirga-zirga:

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

Um... menene? Ee, muna da HTTPS. Me za a yi? Kaddamar da harin MITM akan kanku? Da kyau, wanda aka azabtar da kansa zai taimake mu.

Gabaɗaya, bayan da na yanke shawarar yin amfani da burauzar, a ƙarshe na sami buƙatar kanta da mai adireshin. Tafi:

Tattaunawa tare da tashar tashar

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.

Kai. Hehehe. Lallai, abin da nake tsammani ke nan lokacin aika buƙatun HTTP mara amfani zuwa tashar HTTPS. Ya kamata mu rufaffen asiri yanzu? Duk wannan fuss tare da maɓallin RSA, sannan tare da SHA256. Me ya sa, akwai OpenSSL ga irin wadannan abubuwa. Da kyau, mun riga mun san abin da za mu yi, kawai za mu cire Filayen Referer da Kuki - Ina tsammanin ba za su yi tasiri sosai kan lamarin ba:

Tattaunawa tare da tashar tashar

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

Menene kwakwalwar ɗalibi da ke koyo game da duniyar kwamfuta ke iya iyawa?

Menene wannan, rantsuwa akan uwar garken? To, aƙalla sun amsa min 200 OK, wanda ke nufin cewa kukis da mai ba da shawara ba su shafar komai. Matsi shine gzip, amma lokacin yin kwafi, ana kwafi haruffan ASCII. Daidai, zaku iya cire layin Karɓa-rufin rikodi. Komai yana da kyau - muna samun takaddun HTML, yanzu tare da assonances. Amma a nan akwai tambayoyi biyu: yadda ake gudanar da OpenSSL da canja wurin bayanai zuwa gare ta ta amfani da rubutun? Kuma yadda za a karanta fitarwa idan bayan karbar amsa mun kasance, kamar yadda yake, a cikin OpenSSL "harsashi"? Idan za ku iya fito da wani abu da na biyu, amma da na farko ...

Yana da kyau cewa akwai Habrinda na karanta game da amfani sa ran, wanda ke sarrafa tsarin yin hulɗa tare da shirye-shiryen da ke tsammanin hulɗar ɗan adam. Samun ƙungiya ya fi ban sha'awa tsammani, samarwa sa ran rubutun bisa ga ayyukanku. To, mun kaddamar da shi, yi duk wannan kuma ga rubutun da aka gama. Shi kadai ne babba, kuma duk saboda OpenSSL yana nuna takaddun shaida, maɓallai, da sa ran yana jiran fitowar duk wannan. Muna bukatar wannan? A'a. Muna cire gabaɗayan faɗakarwar farko, barin kawai layin ƙarshe na 'r'. Muna kuma cire Wakilin Mai amfani da Karɓar filayen daga buƙatarmu - ba su shafar komai. Don haka, bari mu ƙaddamar. An aiwatar da rubutun, amma ina ainihin takaddar HTML take? Sa ran ci shi. Don sa shi tofa shi, kuna buƙatar sanya:

set results $expect_out(buffer)

kafin karshen rubutun - wannan shine yadda za a rubuta fitarwa na masu aiwatarwa sa ranUmurnin om kuma an nuna akan allon. A taƙaice, wani abu kamar haka:

tsammanin rubutun

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

Amma ba duka ba! Kamar yadda kuke gani, a cikin duk misalan URL ɗin buƙatun ya tsaya tsayin daka, amma URL ne ke da alhakin wace kalma za a haɗa ta da assonances. Kuma don haka ya bayyana cewa za mu ci gaba da neman kalmar "% d0%b7%d0%b4%d0%b5%d1%81%d1%8c" a cikin ASCII ko "a nan" a cikin UTF-8. Me za a yi? Tabbas, kawai kawai samar da sabon rubutun kowane lokaci, abokai! Ba kuma tsammani'Oh, kuma tare da taimakon Kira, saboda A cikin sabon mu, babu abin da ke canzawa sai kalmar. Kuma sabuwar matsala ta daɗe: ta yaya za mu iya fassara kalma daga Cyrillic cikin basira zuwa tsarin URL? Babu wani abu na musamman don tashar ko dai. To, ba laifi, za mu iya yi, daidai? Iya:

Dubi abin da zan iya yi!

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

Gabaɗaya, muna da rubutun da ke canza kalma zuwa rubutun ASCII, yana haifar da wani rubutun da ke buƙatar shafin yanar gizon tare da assonances daga sabar ta OpenSSL. Sannan mu tura fitar da rubutun ƙarshe zuwa fayil kuma, a tsohuwar hanyar da aka tsara, mu wuce ta "Tace" ƙarin murabba'ai kuma rubuta su zuwa fayil ɗin.

Tsakanin da yawa. Kasan layi

A gaskiya, wannan shine ainihin abin da ke haifar da ƙananan matsaloli. Muna aiwatar da hanyoyin da ke sama don kalmomi biyu, sannan daga lissafin guda biyu muna kwatanta kowace kalma da kowace kuma idan an sami ashana sai mu fitar da ita. Yanzu muna da rubutun da ke ɗaukar kalmomi guda biyu a matsayin shigarwa kuma yana nuna jerin kalmomin da suka dace da duka biyun, har ma da la'akari da al'ada, kuma duk wannan ba tare da canzawa tsakanin shafuka hudu da hannu ba da kuma tunawa da kalmomi "da ido" - duk an tattara, ƙididdiga. don kuma a jefar da su ta atomatik. Abin al'ajabi.

Manufar wannan littafin ita ce a nuna cewa idan mutum yana bukatar wani abu, zai yi hakan. Ba shi da tasiri sosai, karkatacciyar hanya, mai ban tsoro, amma zai yi aiki.

source: www.habr.com

Add a comment