學習電腦世界的學生的大腦有什麼能力?

今天好。

用 Bash 寫完另一個腳本後,我意識到一切都應該完全不同,但一切都有效。 我想向你們展示我為了解決問題而寫的那些淫穢和拐杖,但還沒有知識馬車。 換句話說,這是程式設計的漫畫。

任務


有必要做一些事情:

  • 顯示了該單字的許多押韻(方塊除外)
  • 跨越了兩個字的許多押韻

為了什麼? 嗯,就是這樣 - 就是這樣。
誰不知道,方韻(通常用語是方韻)是兩個單字的拼字中最後兩個字母重合,這(通常,這是唯一的事情)使它們成為押韻。 例如,玫瑰是冰霜的; 輪胎-汽車。 由於方格的原始性,現代韻律中方格的使用並沒有得到人們的特別認可。

解決方法


在我看來,最簡單的解決方案是在 Bash 中編寫一個腳本,該腳本使用現有的韻律產生器 - HOST,它主要透過輔音而不是拼字來選擇它們。 什麼樣的主機? 因為如果你註明網站的真實名稱,他們會說這是廣告。 為什麼不繼續使用它呢? 首先,儘管他有根據協和韻選韻的優勢,但他仍然經常產生方塊。 其次,你仍然需要用大腦思考,花時間在選項卡之間切換,並花精力記住清單中重複的單字以找到兩個單字的押韻。

獲得強烈的押韻

我知道什麼? 我知道這個實用程序 wget的,它會下載指定 URL 處的頁面。 好的,讓我們執行請求 - 我們在一個以押韻單字命名的檔案中得到一個 HTML 頁面。 例如,讓我們搜尋單字“here”:

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

但我只需要一個單字列表,我怎麼能擺脫其他一切? 我們看一下,單字清單被格式化了,不管它有多奇怪,都是清單的形式,而且單字在標籤中。 嗯,我們有一個很棒的實用工具。 口渴 - 讓我們這樣寫:

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

首先,從word檔案中,選擇包含該標籤的行- 我們得到一堆空標籤和帶有文字的行。 我們刪除標籤本身及其結束標籤 - 這裡使用百分比符號而不是斜杠,因為在標籤本身中已經有斜線了,為什麼? 口渴 有點不懂你。 只要有興趣,一切都很好。 我們從檔案中刪除所有空格,刪除空白行。 瞧 - 一個現成的單字清單。

要刪除使用最後一個字母押韻的單詞,請從原始單字中選擇最後兩個字母並清除列表:

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

我們觀察、嘗試──一切都有效……那麼,「玩」這個字的清單在哪裡? 那麼「我要去」這個詞呢? 文件是空的! 這都是因為這些字是動詞,我們知道它們對那些與動詞押韻的人有什麼作用。 動詞押韻甚至比方韻還要差,因為俄語中動詞最多,而且所有動詞都有相同的詞尾,這就是為什麼在檢查詞尾後它們不在最終文件中。

不過,我們並不著急。 每個單字不僅有押韻,還有協和音,有時聽起來比押韻好得多——這就是為什麼它們是協和音(法語協和音,來自拉丁語 assono——我聽起來很合拍)。

我們得到諧音

這就是有趣的地方:透過執行腳本、發送 HTTP 請求並接收回應,諧音出現在單獨的 URL 和同一頁面上。 我怎麼能說 wget的'你按下按鈕嗎? 但沒辦法。 可悲的是。

注意到該行中的 URL 發生了某種變化,我複製了切換到諧音後的內容並將其貼上到新的瀏覽器標籤中 - 打開了強韻律。 不是那個。

從本質上講,我認為,對於伺服器來說,發送請求的腳本是否被執行,或者用戶是否手動鍵入它,都無關緊要。 所以? 誰知道呢,我們去看看吧。

發送到哪裡? 送什麼? 對伺服器IP的HTTP請求,有類似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 連接埠發送裸露 HTTP 請求時所期望的。 我們現在應該加密嗎? 所有這些都與 RSA 金鑰有關,然後是 SHA256。 為什麼,有 OpenSSL的 對於這樣的事情。 好吧,我們已經知道該怎麼做了,我們先刪除 Referer 和 Cookie 欄位 - 我認為它們不會對此事產生太大影響:

與終端對話

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 OK,這意味著 cookie 和引薦來源網址不會影響任何內容。 壓縮是gzip,但是複製的時候複製的是ASCII字元。 確切地說,您可以刪除該行 接受編碼。 一切都很好 - 我們得到了一個 HTML 文檔,現在帶有諧音。 但這裡有兩個問題:如何運行 OpenSSL 並使用腳本向其傳輸資料? 如果在收到回應後我們仍處於 OpenSSL「shell」中,如何讀取輸出? 如果你能在第二個方面想出一些東西,但在第一個方面...

有就好了 哈伯我在哪裡讀到有關該實用程式的信息 期望,它自動執行與期望人類互動的程序的互動過程。 擁有團隊更具吸引力 自動預期,生成 期望 根據您的操作編寫腳本。 好吧,我們啟動它,完成所有這些,這是完成的腳本。 只有他非常巨大,而這一切都是因為 OpenSSL的 顯示憑證、金鑰和 期望 等待這一切的輸出。 我們需要這個嗎? 不。 我們刪除整個第一個提示符,只留下最後一個換行符「r」。 我們也從請求中刪除了 User-Agent 和 Accept 欄位 - 它們不會影響任何內容。 那麼,讓我們開始吧。 腳本已執行,但是珍貴的 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

但這還不是全部! 正如您所看到的,在所有範例中,請求 URL 都是靜態的,但正是該 URL 決定了哪個單字將與諧音相關聯。 事實證明,我們會不斷搜尋 ASCII 中的單字「%d0%b7%d0%b4%d0%b5%d1%81%d1%8c」或 UTF-8 中的「here」。 怎麼辦? 當然,朋友們,每次只需產生一個新腳本即可! 不再 自動預期'哦,在幫助下 錯過, 因為在我們的新版本中,除了這個詞之外沒有任何改變。 新問題萬歲:我們如何聰明地將單字從西里爾字母翻譯成 URL 格式? 終端也沒有什麼特別的。 好吧,沒關係,我們能做到,對吧? 能:

看看我能做什麼!

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

總的來說,我們有一個腳本可以將單字轉換為 ASCII 文本,產生另一個腳本,透過 OpenSSL 從伺服器請求具有諧音的網站頁面。 然後我們將最後一個腳本的輸出重定向到一個文件,並以老式的方式將其傳遞給 “過濾器” 額外的方塊並將它們寫入檔案。

許多的交集。 底線

事實上,這正是造成最少問題的原因。 我們對兩個單字執行上述過程,然後從兩個清單中將每個單字進行比較,如果找到匹配,則將其輸出。 現在我們有一個腳本,它接受兩個單字作為輸入,並顯示與這兩個單字押韻的單字列表,甚至考慮到諧音,而這一切都無需在四個選項卡之間手動切換並「通過眼睛「記住單字- 所有這些都收集、計算並自動丟棄。 精彩的。

這本出版物的目的是表明,如果一個人需要什麼,他無論如何都會去做。 非常無效、扭曲、令人毛骨悚然,但它會起作用。

來源: www.habr.com

添加評論