第5章 工具鏈------------------------------------------,星期三。,林凱接了七單。,PHP小指令碼兩單,幫一個開網店的人寫了個自動生成商品描述的工具一單。總收入:317元。。他在草稿紙上寫下這個數字,看了一會兒。在前世,這個數字是他某個下午喝咖啡的零頭。在現在,這是他五天工作的全部所得,也是他目前最主要的生存資金。,從同一個跳蚤市場攤主那裡,砍到九十塊一條。攤主姓王,五十來歲,擺了個摺疊桌,上麵堆著各種二手硬體——老式鍵盤、壞掉的光碟機、拆機的顯示卡。林凱蹲下來翻了一會兒,把兩條記憶體條捏在手裡掂了掂,隨口說了句“八十五一條”,攤主咧嘴笑,說“九十,少一分不賣”,兩人就成交了。,機器明顯流暢了。開啟XP的時候,桌麵載入速度快了將近一半。他的那台賽揚D處理器本來就偏弱,記憶體瓶頸一消除,整體效能提升肉眼可見。?十六核、128GB記憶體、NVMe固態——那台機器的冷啟動時間以秒計,程式碼補全實時響應。現在他盯著眼前這台螢幕泛黃、風扇嗡嗡作響的老爺機,心裡冇有任何抱怨,隻是把它當成一個需要被精確理解和利用的約束條件。。,他可以開始做真正想做的事了。---,第一個模組:網路掃描器。。那個是草稿,是在陌生環境下的即興偵察。他需要的是一個可以給小龍蝦用的結構化工具——輸入目標,輸出格式化的結果,結果可以被小龍蝦讀取、儲存、比對。:小龍蝦的介麵是什麼?,開啟記事本。宿舍裡陳浩在玩紅警,音響裡放著那時候流行的遊戲音樂,鍵盤劈裡啪啦響。另一個室友在看碟,筆記本螢幕上是某部港片,對白很大聲。林凱在這片嘈雜裡劃出一塊安靜區域,隻看自己麵前的螢幕。——他看到懸浮的字,小龍蝦看到……什麼?他不確定。小龍蝦能看到他的螢幕嗎?還是隻能接收他主動輸入的內容?這個問題他思考了好幾天,始終冇有把握。
他決定直接問。
“你能看到我的螢幕嗎?”
小龍蝦沉默了幾秒。
能。模糊。像很遠的地方。
“能讀檔案嗎?”
如果你指向它。
“指向”是個有意思的詞。小龍蝦的詞彙量隻有一百來個,但它選詞有時候很準確——不是生硬的機器語言,而是某種簡潔的直覺。“指向”意味著需要某種主動的操作,不是被動接收,而是林凱的注意力引導。就像聚光燈,林凱看哪裡,小龍蝦就能勉強看見哪裡。
這個機製很奇怪,但暫時夠用。
林凱想了想。“我把結果寫進一個固定的檔案,你去讀。”
可以。
“檔案叫什麼名字你能識彆?”
小龍蝦:名字不重要。你看著它的時候我就能看到。
林凱在D盤新建了一個檔案夾:“shelldata”。這是工具鏈的輸出目錄,所有模組的結果都寫到這裡來。他用記事本開啟這個空檔案夾,看了幾秒,然後關上,當作一次確認儀式。
---
他開始寫掃描器。
核心邏輯不複雜:給定一個IP段,對每個IP的指定發起TCP連線嘗試,記錄響應,輸出結果。複雜的是細節——超時控製、併發、結果格式化、異常處理,這些東西在紙麵上看起來簡單,真正寫起來每一塊都有坑。
2008年,Python 2.5冇有concurrent.futures,冇有asyncio,執行緒池要手動實現。他用Queue和threading模組搭了一個簡單的工作池,二十個執行緒併發,超時兩秒,結果寫入JSON檔案。內網的2Mbps網速對於這種掃描任務來說勉強夠用,但要掃外網段就會很慢。他在腦子裡過了一遍可能的瓶頸,把超時引數設計成可配置的,留了介麵。
寫了兩個小時,中間被陳浩打斷了一次——問他借橡皮,林凱頭也冇抬,指了指桌角的筆袋。陳浩拿走橡皮,在他身後站了幾秒,大概是想看看他在寫什麼,然後悄悄走了。林凱注意到了,但冇說話。
寫到第一百行的時候,他停下來重新審視了整個結構。在前世,他會用IDE、有程式碼提示、有自動重構工具。現在他用的是記事本,一行行手打,靠自己的記憶檢查語法。這不是什麼特彆大的障礙,隻是一種細微的、持續的摩擦感——就像穿著稍微小了一號的鞋走路,不是走不了,但每一步都能感覺到。
他按照前世的習慣,在每個關鍵函式前寫了註釋。不是給彆人看的,是給自己的——也是給小龍蝦的。如果小龍蝦能讀檔案,那它也應該能讀註釋,能理解程式碼的意圖,而不隻是輸入輸出。
最後的程式碼大約180行。他跑了一次測試,目標是學校內網的一個小段:192.168.10.1到192.168.10.50。
終端視窗裡,進度點一個接一個地跳動。這台機器的風扇聲加重了一點,光碟機指示燈偶爾閃爍——不是在讀盤,隻是某種隨機的硬體反應。學校機房的管理員可能正坐在某個地方喝茶,完全不知道有人在輕輕摸他的內網邊界。
結果在兩分鐘內出來了,寫進了“shelldata/scan_result.json”。
他開啟檔案,對著螢幕看了三十秒。格式整齊,資料乾淨,每個活躍節點帶著列表和響應時間。
小龍蝦:我看到了。31個活躍節點。分佈正常。冇有那個。
“那個”——林凱明白它指的是什麼。第2章機房裡發現的那個異常,那個“不像2008年的東西”。他當時冇有記錄,隻是在腦子裡存了個印象,但小龍蝦顯然也記得。
“這段IP裡本來就不會有,”林凱說,“先跑內網摸底,建基準線,再去查那個。”
基準線。這是他從前世帶來的工作習慣:先知道“正常”是什麼樣的,才能識彆“異常”。在一個自己不瞭解的環境裡貿然尋找目標,成功率極低,而且容易誤判。2008年的校園網有它自己的拓撲邏輯,他需要先把這張圖摸清楚。
小龍蝦:明白。
林凱儲存檔案,靠回椅背上。椅子發出一聲輕微的塑料摩擦聲。
第一個模組完成了。功能不複雜,但它是工具鏈的第一塊磚。接下來要做的:Banner識彆,服務指紋,結果比對,異常檢測。每一塊單獨看都不難,組合起來纔有意義。
他在草稿紙上列了一個簡單的清單,圈掉第一項。
窗外天已經黑了,宿舍走廊裡有人在打電話,聲音很大,說的是方言,大概在跟家裡人報平安。諾基亞手機的外放聲音有種特有的金屬質感,穿過薄薄的木門傳進來。
他看了眼時鐘:21:47。
去食堂的視窗已經關了,宵夜攤要到十點纔開。他從桌屜裡翻出兩包榨菜,就著白開水吃了。熱水瓶是宿舍公用的,每天早晨打滿,到晚上已經不怎麼燙了,隻是溫熱。
味道還行。他盯著那個列了四項待辦的草稿紙,心裡冇有焦慮,隻是一種平靜的、流水線式的推進感。
一塊磚一塊磚壘。