ስለ ኮምፒዩተር አለም የሚማር የተማሪ አእምሮ ምን ሊሆን ይችላል?

ትክክለኛ ሰዓት.

በባሽ ውስጥ ሌላ ስክሪፕት መፃፍ እንደጨረስኩ ፣ ሁሉም ነገር ፍጹም የተለየ መሆን እንዳለበት ተገነዘብኩ ፣ ግን ሁሉም ነገር ሠርቷል። ችግሩን ለመፍታት የጻፍኩትን ጸያፍ እና ክራንች ላሳይህ እፈልጋለሁ ነገር ግን ገና የእውቀት ሠረገላ የለኝም። በሌላ አገላለጽ ፣ የፕሮግራም አወጣጥ ባህሪ።

ዓላማ


ለማድረግ አንድ ነገር አስፈላጊ ሆነ፡-

  • ከካሬዎች በስተቀር ለቃሉ ብዙ ግጥሞችን አሳይቷል።
  • የሁለት ቃላትን ብዙ ግጥሞች አልፈዋል

ለምንድነው? ደህና ፣ ያ ነው - እና ያ ነው።
ማን የማያውቅ ካሬ ግጥም (በጋራ ቋንቋ - ካሬ) በፊደል አጻጻፍ ውስጥ ያሉት የመጨረሻዎቹ ሁለት ፊደላት የሚገጣጠሙ ሁለት ቃላት ናቸው ፣ ይህም (ብዙውን ጊዜ ይህ ብቸኛው ነገር ነው) አንድ ግጥም ያደርጋቸዋል። ለምሳሌ, ጽጌረዳዎች በረዶ ናቸው; ጎማ - መኪና. በዘመናዊ አጻጻፍ ውስጥ የካሬዎችን አጠቃቀም በተለይ በሰዎች ዘንድ ተቀባይነት አላገኘም, በጥንታዊነታቸው ምክንያት.

ዉሳኔ


ቀድሞውንም የነበረ የግጥም ጄኔሬተር - HOST በዋናነት የሚመርጣቸው በፊደል ሳይሆን በባሽ ስክሪፕት መፃፍ ቀላሉ መፍትሄ መስሎ ታየኝ። ምን አይነት HOST? ምክንያቱም የገጹን ትክክለኛ ስም ከጠቆሙት ማስታወቂያ ነው ይላሉ። ለምን መጠቀም አትቀጥልም? በመጀመሪያ ፣ በተነባቢዎች ላይ በመመስረት ግጥሞችን የመምረጥ ጥቅም ቢኖረውም ፣ አሁንም ብዙ ጊዜ ካሬዎችን ይሠራል። በሁለተኛ ደረጃ፣ የሁለት ቃላት ግጥም ለማግኘት አሁንም በአንጎልዎ ማሰብ፣ በትሮች መካከል በመቀያየር ጊዜ ማሳለፍ እና በዝርዝሮች ውስጥ ተደጋጋሚ ቃላትን በማስታወስ ሃይል ማጥፋት አለቦት።

ጠንካራ ግጥሞችን ማግኘት

ምን አውቃለሁ? ስለ መገልገያው አውቃለሁ wget, በተጠቀሰው URL ላይ ገጹን የሚያወርድ. እሺ፣ ጥያቄውን እናስፈጽም - በግጥም ቃል በተሰየመ ፋይል ውስጥ የኤችቲኤምኤል ገጽ እናገኛለን። ለምሳሌ፣ “እዚህ” የሚለውን ቃል እንፈልግ፡-

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

ግን የቃላቶች ዝርዝር ብቻ እፈልጋለሁ, ሌላውን ሁሉ እንዴት ማስወገድ እችላለሁ? የቃላቶቹ ዝርዝር ምንም ያህል እንግዳ ቢሆን በዝርዝሮች መልክ እና ቃላቶቹ በ tags ውስጥ እንዳሉ አይተን እናያለን . ደህና, በጣም ጥሩ መገልገያ አለን. ተሸሽቷል - እንዲህ እንጽፈው፡-

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

በመጀመሪያ ፣ ከፋይሉ ቃል ፣ መለያውን የያዙትን መስመሮች ይምረጡ - ባዶ መለያዎችን እና መስመሮችን በቃላት እናገኛለን። መለያውን እራሱ እና መዝጊያውን እናስወግዳለን - እዚህ በመቶኛ ምልክቶች ከመቁረጥ ይልቅ ጥቅም ላይ ይውላሉ ምክንያቱም በመለያው ውስጥ ቀደም ሲል መጨፍጨፍ አለ ፣ ለምን? ተሸሽቷል ትንሽ አይረዳህም። እና ሁሉም ነገር ከወለድ ጋር ጥሩ ነው. ሁሉንም ክፍተቶች ከፋይሉ ውስጥ እናስወግዳለን, ባዶ መስመሮችን እናስወግዳለን. ቮይላ - ዝግጁ የሆነ የቃላት ዝርዝር.

የመጨረሻዎቹን ፊደላት ተጠቅመው የሚጣመሩ ቃላትን ለማስወገድ ከዋናው ቃል የመጨረሻዎቹን ሁለት ፊደላት ይምረጡ እና ዝርዝሩን ያጽዱ።

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

እንመለከታለን, እንሞክራለን - ሁሉም ነገር ይሰራል ... ስለዚህ "መጫወት" የሚለው ቃል ዝርዝር የት አለ? እና "እሄዳለሁ" ለሚለው ቃል? ፋይሉ ባዶ ነው! ይህ ሁሉ የሆነው እነዚህ ቃላት ግሦች በመሆናቸው ነው፣ እና በግሥ ለሚጠሩት ምን እንደሚያደርጉ እናውቃለን። የግሥ ግጥም ከካሬ ግጥም እንኳን የከፋ ነው፣ ምክንያቱም የሩሲያ ቋንቋ ብዙ ግሦች ስላሉት እና ሁሉም ተመሳሳይ ፍጻሜ ያላቸው ናቸው፣ ለዚህም ነው መጨረሻዎቹን ካረጋገጡ በኋላ በመጨረሻው ፋይል ውስጥ ያልነበሩት።

ቢሆንም ግን አንቸኩልም። ለእያንዳንዱ ቃል ግጥሞች ብቻ ሳይሆን ቃላቶችም አሉ ፣ እነሱም አንዳንድ ጊዜ ከግጥም የበለጠ ጥሩ ድምጽ አላቸው - ለዚያም ነው አስሶንንስ የሆኑት (የፈረንሳይ አሶንንስ ፣ ከላቲን assono - እኔ በስምምነት እሰማለሁ)።

ምኞቶችን እናገኛለን

መዝናኛው የሚጀምረው እዚህ ነው፡ አሶንሴስ በተለየ ዩአርኤል እና በተመሳሳይ ገጽ ላይ ስክሪፕት በማስፈጸም፣ HTTP ጥያቄ በመላክ እና ምላሽ በመቀበል። እንዴት ነው የምለው wget'አዝራሩን ትጫናለህ? ግን ምንም መንገድ. በሚያሳዝን ሁኔታ.

በመስመሩ ላይ ያለው ዩአርኤል እንደምንም እየተቀየረ መሆኑን ሳስተውል፣ ወደ assonances ከቀየርኩ በኋላ ያለውን ነገር ገልብጬ በአዲስ የአሳሽ ትር ላይ ለጥፍኩት - ጠንካራ ግጥሞች ተከፍተዋል። ያ አይደለም።

በመሠረቱ፣ እኔ አሰብኩ፣ ጥያቄውን የላከው ስክሪፕት መፈጸሙ ወይም ሰውዬው በእጅ ቢተይበው ለአገልጋዩ ምንም ችግር የለውም። ታዲያ? ማን ያውቃል እንሂድ እንፈትሽ።

የት መላክ? ምን መላክ? የኤችቲቲፒ ጥያቄ ለአገልጋዩ አይፒ፣ እንደ GET ያለ ነገር አለ...ከዛም HTTP/1.1 የሆነ ነገር አለ... አሳሹ ምን እንደሚልክ እና የት እንደሚልክ ማየት አለብን። ጫን wireshark, ትራፊክን ተመልከት:

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

እም... ምን? ኦህ አዎ፣ HTTPS አለን። ምን ለማድረግ? በራስህ ላይ MITM ጥቃት ይጀመር? በሐሳብ ደረጃ, ተጎጂው እራሷ ይረዳናል.

በአጠቃላይ አሳሹን ለማሰስ ወስኜ በመጨረሻ ጥያቄውን እራሱ እና አድራሻውን አገኘሁት። ሂድ፡

ከተርሚናል ጋር ውይይት

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.

ሄይ ሄሄሄ. በእርግጥ፣ ባዶ የሆነ የኤችቲቲፒ ጥያቄ ወደ HTTPS ወደብ ሲልክ የጠበቅኩት ያ ነው። አሁን ኢንክሪፕት ማድረግ አለብን? ይህ ሁሉ በRSA ቁልፎች፣ ከዚያ በSHA256 ጫጫታ። ለምን ፣ አለ OpenSSL ለእንደዚህ አይነት ነገሮች. ደህና፣ ምን ማድረግ እንዳለብን አስቀድመን አውቀናል፣ መጀመሪያ የማጣቀሻ እና የኩኪ መስኮችን እናስወግዳለን - እነሱ በጉዳዩ ላይ ብዙም ተጽዕኖ አይኖራቸውም ብዬ አስባለሁ።

ከተርሚናል ጋር ውይይት

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

ስለ ኮምፒዩተር አለም የሚማር የተማሪ አእምሮ ምን ሊሆን ይችላል?

በአገልጋዩ ላይ መሳደብ ይህ ምንድን ነው? ደህና፣ ቢያንስ 200 እሺ ብለው መለሱልኝ፣ ይህ ማለት ኩኪዎች እና አጣቃሹ ምንም አይነኩም ማለት ነው። መጭመቅ gzip ነው፣ ነገር ግን በሚገለበጥበት ጊዜ፣ የASCII ቁምፊዎች ይገለበጣሉ። በትክክል, መስመሩን ማስወገድ ይችላሉ ተቀበል - ኮድ ማድረግ. ሁሉም ነገር ደህና ነው - የኤችቲኤምኤል ሰነድ አግኝተናል ፣ አሁን ከስምምነት ጋር። ግን እዚህ ሁለት ጥያቄዎች አሉ፡ እንዴት OpenSSL ን ማስኬድ እና ስክሪፕት በመጠቀም ውሂብ ወደ እሱ ማስተላለፍ? እና ምላሹን ከተቀበልን በኋላ ልክ እንደ OpenSSL "ሼል" ውስጥ ከቀረን ውጤቱን እንዴት ማንበብ ይቻላል? ከሁለተኛው ጋር አንድ ነገር ማምጣት ከቻሉ, ግን ከመጀመሪያው ጋር ...

መኖሩ ጥሩ ነው። ሀብርስለ መገልገያው ያነበብኩበት መጠበቅ, ይህም የሰዎችን መስተጋብር ከሚጠብቁ ፕሮግራሞች ጋር የመገናኘትን ሂደት በራስ-ሰር ያደርገዋል. ቡድን መኖሩ የበለጠ ማራኪ ነው። በራስ መጠበቅ, ማመንጨት መጠበቅ በድርጊትዎ ላይ የተመሰረተ ስክሪፕት. ደህና ፣ እናስጀምረዋለን ፣ ይህንን ሁሉ ያድርጉ እና የተጠናቀቀው ስክሪፕት እዚህ አለ። እሱ ብቻ በጣም ግዙፍ ነው, እና ሁሉም ምክንያቱም OpenSSL የምስክር ወረቀቶችን፣ ቁልፎችን እና ያሳያል መጠበቅ የዚህን ሁሉ ውጤት ይጠብቃል. ይህ ያስፈልገናል? አይ. የመጨረሻውን የመስመር መግቻ 'r' ብቻ በመተው የመጀመሪያውን ጥያቄ እናስወግደዋለን። እንዲሁም የተጠቃሚ-ወኪሉን እናስወግዳለን እና መስኮችን ከጥያቄያችን እንቀበላለን - ምንም አይነኩም። ስለዚህ፣ እንጀምር። ስክሪፕቱ ተፈጽሟል፣ ግን ውድ የሆነው HTML ሰነድ የት አለ? የተጠበቀው በላው። እሱን እንዲተፋ ለማድረግ የሚከተሉትን ማድረግ አለብዎት:

set results $expect_out(buffer)

ከስክሪፕቱ መጨረሻ በፊት - የማስፈጸሚያው ውጤት የሚፃፈው በዚህ መንገድ ነው። መጠበቅ'om ትዕዛዝ እና በማያ ገጹ ላይ ይታያል. በማጠቃለያው እንደዚህ ያለ ነገር፡-

ስክሪፕት ይጠብቁ

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

ግን ያ ብቻ አይደለም! እንደሚመለከቱት፣ በሁሉም ምሳሌዎች ውስጥ የጥያቄው ዩአርኤል የማይንቀሳቀስ ነበር፣ ነገር ግን ለየትኛው ቃል ከአሶንሴንስ ጋር እንደሚዛመድ ተጠያቂው ዩአርኤል ነው። እና ስለዚህ "%d0%b7%d0%b4%d0%b5%d1%81%d1%8c" የሚለውን ቃል በASCII ወይም "እዚህ" በ UTF-8 ውስጥ ያለማቋረጥ እንፈልግ ይሆናል። ምን ለማድረግ? በእርግጥ ፣ በቀላሉ ሁል ጊዜ አዲስ ስክሪፕት ይፍጠሩ ፣ ጓደኞች! ከአሁን በኋላ አይደለም በራስ መጠበቅኦህ ፣ እና በእርዳታ ድብልቅ, ምክንያቱም በአዲሳችን ከቃሉ በቀር ምንም አይለወጥም። እና አዲሱ ችግር ለዘላለም ይኑር፡ አንድን ቃል ከሲሪሊክ ወደ ዩአርኤል ቅርጸት እንዴት በብልህነት መተርጎም እንችላለን? ለተርሚናልም ምንም የተለየ ነገር የለም። ደህና ፣ ምንም አይደለም ፣ እኛ ማድረግ እንችላለን ፣ አይደል? ይችላል፡

ምን ማድረግ እንደምችል ተመልከት!

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

በአጠቃላይ፣ በOpenSSL በኩል ከአገልጋዩ የተሰጠውን የጣቢያ ገጽ የሚጠይቅ ሌላ ስክሪፕት የሚያመነጭ ቃል ወደ ASCII ጽሑፍ የሚቀይር ስክሪፕት አለን። እና ከዚያ የመጨረሻውን ስክሪፕት ውፅዓት ወደ ፋይል እናዞራለን እና በአሮጌው መንገድ እናልፋለን። "ማጣሪያዎች" ተጨማሪ ካሬዎች እና ወደ ፋይሉ ይፃፉ.

የብዙዎች መገናኛ። በመጨረሻ

እንደ እውነቱ ከሆነ, ይህ በትክክል አነስተኛ ችግሮችን ያስከትላል. ከላይ የተጠቀሱትን ሂደቶች ለሁለት ቃላት እናከናውናለን, ከዚያም ከሁለቱ ዝርዝሮች እያንዳንዱን ቃል ከእያንዳንዱ ጋር እናነፃፅራለን እና ተዛማጅ ከተገኘ, እናወጣዋለን. አሁን ሁለት ቃላትን እንደ ግብአት የሚወስድ እና ከሁለቱም ጋር የሚጣጣሙ ቃላቶችን ዝርዝር የሚያሳይ ስክሪፕት አለን ፣ እና እንዲያውም ትዕዛዙን ከግምት ውስጥ በማስገባት ይህ ሁሉ በእጅ በአራት ትሮች መካከል ሳንቀያየር እና ቃላትን “በዐይን” ሳታስታውስ - ሁሉም ተሰብስቧል ፣ ተቆጥሯል ። ለ እና በራስ-ሰር ይጣላል. ድንቅ።

የዚህ እትም አላማ አንድ ሰው አንድ ነገር ከፈለገ ለማንኛውም እንደሚያደርገው ለማሳየት ነው። በጣም ውጤታማ ያልሆነ ፣ ጠማማ ፣ ዘግናኝ ፣ ግን ይሰራል።

ምንጭ: hab.com

አስተያየት ያክሉ