Chromium 給整個瀏覽器收一個代理,而這一直夠用,直到你需要兩個帳號同時開著的那一天。
一個要驗證的代理,麻煩的地方不是位址。是它後面那兩個欄位,以及它們必須被填在哪裡。
把 Chromium 指向一個代理的那個命令列參數,帶的是一個位址,別的什麼都不帶。上面沒有給帳號留的欄位,而文件裡給出的提供辦法,是一個擴充功能去接住代理送回來的驗證請求。
擴充功能能從頁面經由 chrome.runtime 被摸到,於是這個變通做法又成了一件告訴網站這個瀏覽器不尋常的事。SigoLogin 改在瀏覽器外面做驗證。一個小的 SOCKS5 服務跑在 127.0.0.1 上,自己不要密碼,由它和真正的代理對話。Chromium 被指向回送位址上的那個位址,所以憑證從來不在頁面看得到的任何地方。
每個開起來的設定檔都得到自己的一個中轉,連接埠由作業系統在那一刻分給它。沒有什麼要設定的:設定裡沒有接聽的連接埠,也沒有一個被機器上所有東西共用的本機代理。
兩個設定檔用一個中轉,就是兩個設定檔用一個出口位址,而那正是一個設定檔存在要避開的事。瀏覽器關掉時,它的中轉是在它之後停、不是之前,因為一個跑著一半掉了代理的瀏覽器,可能退回到直連出去。
SOCKS5、HTTP 和 HTTPS,帶帳號的和不帶的都行。一個 HTTP 代理和一個 HTTPS 代理都是用 CONNECT 方法接上的,所以下拉選單裡那兩個名字,底下是同一條路。一筆代理記錄裝的就是這些,後面沒有第二個分頁:
| 欄位 | 裡面填什麼 |
|---|---|
| 標註 | 可不填。你自己給這筆記錄取的名字,二十筆共用一個主機時,就是它讓這份清單還讀得下去 |
| 通訊協定 | SOCKS5、HTTP 或 HTTPS |
| 主機與連接埠 | 一個主機名稱或者一個位址,加上你的供應商給你的連接埠 |
| 使用者名稱 | 可不填。清掉它也會把密碼清掉,因為沒有帳號的代理用不上密碼 |
| 密碼 | 一存下就再也不會顯示。編輯一筆記錄時這個欄位是空的,空欄位的意思是保留現有的密碼 |
密碼在落到磁碟之前先用 Windows 的資料保護服務包起來,金鑰綁在你的 Windows 帳戶上。把資料夾複製到另一台電腦,密碼不會跟著走:應用程式會說出來然後停下,而不是沒有它就把瀏覽器打開,再留一個網路錯誤給你去猜。
供應商按哪種寫法順手就那樣匯出,所以四種寫法原樣收下:主機、連接埠、使用者名稱和密碼用冒號隔開;帳號寫在主機前面,中間一個 at 符號;同樣這四項用逗號隔開;以及上面任一種前面加了 socks5:// 前綴。列上的前綴勝過對話框裡選的通訊協定,因為一列自己說了它是什麼,它更清楚。空白列和以井號開頭的列會被略過,不算失敗,而含冒號或者 at 符號的密碼也活得下來:切分取在最後一個 at 符號和第一個冒號處。
一列讀不出來,不會把整批拖下去。其餘的都進去,而失敗的那些列會一字不差地回到你面前,這是在一百列裡找出那一列壞的唯一實用辦法。
供應商也賣那種一個主機、工作階段寫在使用者名稱裡的東西。複製一筆記錄會把密碼一起帶過去,所以五個工作階段是改五次一個字元,而不是五次重新打一遍機密。複製出來的那筆不會繼承的是檢測結果:它還什麼都沒證明過,而一筆開頭就帶著一個勾和一個它從沒掙到的時區的複製記錄,上面還會建起一個指紋。
把頁面請求送過代理是容易的那一半。下面每一條都是一條獨立的出路,在一個獨立的層裡,其中任何一條留著開口,另外三條就白做了。
如果你的機器先解析主機名稱,再向代理要一個位址,那這次查詢已經從你自己的線路上出去了。這不只是隱私的事:有些供應商只有在拿到一個名稱時才套用你選的國家,所以一個以位址形式抵達的請求,會從別的地方出來。我們量到過同一時刻,一個代理對主機名稱從泰國出去,對位址從新加坡出去。
中轉把名稱照瀏覽器給的樣子遞過去,讓代理去解析。代理檢測被強制做同樣的事,並且走同一個中轉,因為一次在你機器上解析名稱的檢測,報的是一個瀏覽器永遠不會用的國家。建置裡有一個測試,透過一個替身代理向一個主機名稱開連線,如果抵達的是一個位址,它就失敗。
WebRTC 不走瀏覽器的代理。現在的 Chrome 把本機位址藏在一個 mDNS 名稱後面,但它從一台 STUN 伺服器拿回來的候選位址,仍然帶著你這條線路的真實位址。在這條路被關掉之前,在我們自己的建置上量過:一個偵測頁面在 HTTP 上讀到一個美國位址,在 WebRTC 上讀到一個越南位址,同一個設定檔,同一時刻。
有代理的設定檔現在啟動時,代理之外的 UDP 是關掉的,所以再沒有第二個位址可以報。這個決定是按設定檔在那一刻的實際狀態定的,不是按早先產生的一份指紋:一個指紋是在你掛上代理之前做的設定檔,以前啟動時是沒有這個開關的,而螢幕上沒有任何東西說過這件事。
瀏覽器預設把回送位址上的任何東西不經代理直接送出去,出於它自己的理由。一個頁面去要一個本機位址上的東西,就會由你的機器來答,越過這份清單上其餘的一切。有代理的設定檔啟動時會去掉這條豁免。
先停中轉,會留下一個還在跑的瀏覽器,它代理設定的另一頭什麼都沒有,而處在這個位置的瀏覽器可能退回到直連。所以順序被反過來定死:先關瀏覽器,它用過的那個中轉在它之後才停。
一個從俄亥俄的位址報出雅加達時區的瀏覽器,已經自己跟自己矛盾了,在 canvas 或者字型上做多少工夫都蓋不住這一處。所以時區不是你的,也不是一個設定:它來自代理檢測,而那次檢測會問一個地理定位服務,哪個時區屬於這個確切的位址。
不是來自國家代碼,那才是走錯的那條捷徑。一張從國家到時區的表,給美國的是 America/New_York,於是一個從加州出去的代理就差了三個小時。這在這裡發生過,在一個真實的代理上,所以用的是服務對這個位址傳回的時區,國家表只是它涵蓋的那二十個國家的後備。
接受語言跟著國家走,後面再加上英文。一個越南位址給出的設定檔,先要越南文,再要英文,這正是一個在越南的瀏覽器會送出的。
當服務答出一個位址但沒有國家,應用程式就記成沒有國家,而不是替它挑一個。一個錯的國家會連帶拖來一個錯的時區,而一個退回到預設時區的設定檔是小一些的麻煩。檢測會告訴你發生的是兩者中的哪一個。
開一個設定檔,是代理不再只是表格裡一列的時刻。四種狀態,每一種都在 Chromium 啟動之前就定下來,不是之後。
| 代理的狀態 | 開設定檔時會做什麼 |
|---|---|
| 上次檢測在十分鐘以前 | 先重新檢測並記下答案,再從它建指紋 |
| 有應答 | 瀏覽器啟動,用的是作答那個位址的時區和語言 |
| 沒有應答 | 設定檔不開,而且你會拿到原因:帳號被拒、位址或連接埠不對,或者十秒鐘的沉默 |
| 此後主機、連接埠或帳號被改過 | 儲存這次修改把舊答案清掉了,所以這算從沒檢測過,現在就檢測 |
十分鐘不是為了順口挑的一個整數。輪換代理在一次工作階段裡守住一個位址,然後就換掉,而我們記錄過一個從新加坡作答,同一次工作階段裡稍後從印度作答。在較舊那個答案上開的設定檔,會一邊宣布新加坡的時鐘,一邊從印度出去,而這正是整個這一頁在講的那種自相矛盾。
你開一個設定檔時,有兩件事到我們的伺服器:那個設定檔到底有沒有代理,以及它是從哪個國家出去的。是哪個代理、哪個位址,不在那筆紀錄裡,而本站給你看的那份設定檔清單裡,沒有任何種類的代理。
出口位址確實走一次。我們的瀏覽器只在我們伺服器簽章過的指紋上跑,而這個位址是被簽的內容的一部分,所以它隨指紋其餘部分一起上去,帶著簽章直接回來。伺服器不保留它。
代理密碼,以及已儲存帳號的密碼與 2FA 金鑰,是應用程式不得不放在磁碟上的機密。它們用 Windows 的資料保護服務包起來,金鑰綁在你的 Windows 帳戶上,所以把資料夾複製到另一台電腦或另一個使用者底下,這些東西不會跟著過去。
錯誤訊息在離開你的電腦之前會先清洗過。任何形如 scheme://user:password@host 的位址,登入的部分會被換成三個星號,超過 500 個字元的部分會被截掉。主機與連接埠會保留,所以代理連線失敗時可能帶著那個代理的位址與連接埠。
上面這一切在幾秒鐘裡發生一次,在你看不見的地方。這一部分才是你打交道的。
這一頁上沒有任何東西被留給付費方案。方案改的是你能留幾個設定檔、能啟用幾台機器。
| 功能 | 免費版 | 個人版 | 專業版 | 企業版 |
|---|---|---|---|---|
| 帶帳密驗證的代理,不外洩 DNS | ||||
| 時區與語言跟著代理所在國家 | ||||
| 設定檔數量 | 3 | 50 | 300 | 無上限 |
代理在這裡不計數,也不販售。應用程式對你留幾筆記錄不設上限,裡面也沒有任何東西替你買位址。
批次新增就按你的供應商匯出的樣子收下整塊。通訊協定選一次,給那些自己不聲明協定的列用。
全部檢測把每一筆同時跑一遍,並記下每一筆傳回的位址、國家和時區。一筆已經死掉的記錄,現在被發現比在你需要那個帳號的那一刻被發現好。
在設定檔自己那一列上挑代理。指紋的時區和語言取自那個位址,一個中轉只為這一個設定檔起來。
不賣。應用程式裡沒有任何東西買位址、轉賣位址或者發放位址,也沒有供應商帳號要連。你帶來你自己已經在付錢的代理,供應商常匯出的那四種寫法都收。
SOCKS5、HTTP 和 HTTPS,帶帳號密碼的和不帶的都行。HTTP 和 HTTPS 都是用 CONNECT 方法接上的,所以連線一旦建立,兩者的行為一樣。
不必,而這正是應用程式被做成現在這樣的原因。Chromium 的代理啟動參數沒有地方放帳號,所以慣常的答案是一個擴充功能來提供它,而擴充功能是你造訪的任何頁面都問得到的東西。SigoLogin 在回送位址上跑一個小的 SOCKS5 服務,驗證在那裡做,在瀏覽器外面。
可以。一個代理是一筆獨立的記錄,幾個設定檔指向它都行,一個改過的密碼也是這樣在一個地方就改完。不過它們之後共用一個出口位址,所以把這種用法留給本來就打算看起來有關聯的設定檔。
設定檔不會開。沒有新鮮應答的代理,會在瀏覽器啟動之前先測一次,如果它一直不出聲,你拿到的是原因,不是一個視窗。照開不誤的結果,是一個沒有連線的瀏覽器,或者一個從你自己的位址出去的瀏覽器。
一個動作做不到。代理是在設定檔自己那一列上設的。能放大的是反方向:一筆記錄給幾個設定檔用都行,所以一百個設定檔走一個代理,是一筆記錄和一個密碼,不是一百個。
不會。主機名稱是沒有解析就交給代理的,建置裡有一個測試,只要這條路上有任何一段在本機解析了主機名稱,它就失敗。有代理的設定檔啟動時還會去掉瀏覽器對本機位址那條慣常的豁免,所以再沒有什麼能繞過它。
代理或 VPN 換的是請求從哪個位址過來,僅此而已;瀏覽器描述的還是同一台電腦。兩者是互相補充,不是互相取代。SigoLogin 要求每個設定檔配一個代理,並從那個代理所在的國家取時區與語言,讓它們不會和位址相矛盾。