題 沒有root或ssh的linux上的端口轉發


我想知道是否有可能在沒有root或ssh的情況下獲得端口轉發。

目前我這樣做

ssh -L 20080:othermachine:80 localhost

使用ssh可以獲得某些好處,比如創建加密隧道等。在上面的例子中,我不這樣做,所以使用ssh似乎是不必要的開銷。有更簡單的方法嗎?

我想創建一個讀取一個套接字上的所有數據並將其發送到另一個套接字的程序並不難,反之亦然。必須有一些工具可以比我寫的更好地完成這項工作。


4
2017-10-03 08:53


起源


這個例子你不需要root。 - Arjan
我想我應該更清楚一點,我沒有特別的問題。更重要的是,雖然這有效,但我認為必須有其他解決方案可以更好。 (至於根部分,我可以使用iptables進行端口轉發,但這需要root。) - BlackShift


答案:


我也更喜歡ssh,因為加密,但'socat'也應該對你有用。


9
2017-10-03 09:04



謝謝!從未聽說過socat,這個程序可以做的比我想像的要多得多。我確信我會找到更多用途,而不僅僅是端口轉發。 - BlackShift
從localhost上的端口8880到target.example.com上的端口80的標準持久端口隧道: socat TCP4-LISTEN:8880,fork,reuseaddr TCP4:target.example.com:80。如果在結束shell會話後希望它保持不變,請將其發送到後台(Ctrl-Z) bg 並且否認它 disown socal - Rolf


你問: Is there an easier way to do this?  簡單的答案是'不'。 SSH可以滿足您的需求,它是一個使用良好,知名度很高,非常有效的程序(我可以想像)很少有錯誤,它可以在您能想像到的每個平台上使用,並且啟動安全。你沒有說性能是一個問題,所以我沒有看到為什麼不親自使用SSH的原因。

如果要將本地端口轉發到其他計算機上的端口,則需要在該遠程主機上進行身份驗證的內容。這是SSH。如果您只想弄亂本地端口,那麼如上所述, socat 可能就是你想要的。


3
2017-10-03 14:35



目前沒有特定的理由不使用ssh,但我想擴大我的工具集,而socat似乎非常強大。 (akira是第一個提出它的,所以我檢查了他的答案。) - BlackShift
順便說一句,ssh不是最佳的三個原因:1)它不可用(比如在我的手機上,但我懷疑我可以在那里安裝socat),2)沒有sshd,或者在我的情況下有限數量的允許登錄,3)遠程計算機上沒有帳戶(因此無論如何都無法加密/壓縮隧道) - BlackShift
ssh不是最佳的另一種情況是當您移動大量數據並且處理能力有限時。在這種情況下,ssh加密所施加的CPU負載很大,並且還會減慢傳輸速度。儘管如此,這並不意味著您可以為了性能而忽略安全性,但在某些情況下,安全層是不必要的(例如您通過專用網絡進行通信) - wojtow


如果你正在做什麼,並且你沒有看到任何性能問題,我不會改變任何東西。如果您沒有傳輸大量數據,則不應產生太大影響。如果你是,ssh可以壓縮數據,所以你仍然可能會更好。

唯一的問題可能是延遲。看起來你正在挖掘http流量,所以它應該可以忽略不計。


1
2017-10-03 13:48



(從 man ssh: 在調製解調器線路和其他慢速連接上需要壓縮,但這只會減慢快速網絡上的速度。) - Arjan
我看到了,但不太同意。它取決於網絡的速度,網絡的速度以及移動的數據量。我在使用快速服務器的GigE網絡上使用它來獲取大(數GB)數據量方面有很好的經驗。 - KeithB


簡單來說,似乎新的nmap 5附帶的ncat可以做與socat類似的事情: http://nmap.org/ncat/


1
2017-11-30 15:55





無論你使用什麼工具:當你不使用Windows時,你會 總是 (和 只要)使用特權端口(“眾所周知的端口”)時需要以超級用戶權限運行。所以:當使用最多包括1023的端口時。


0
2017-10-03 14:03



轉發到低端口(已經在偵聽)不需要超級用戶權限,僅用於接受端口(在我的示例中為10080)。 - BlackShift