[英]C++ UDP Socket port multiplexing
如何在C ++中創建客戶端UDP套接字,以便它可以在另一個應用程序正在監聽的端口上進行監聽? 換句話說,如何在C ++中應用端口多路復用?
我只想在一個端口上收聽
您可以使用嗅探器來做到這一點。 只是忽略來自不同端口的數據包。
我可能需要阻止它發出某些特定的數據包,因為我的程序將發送它而不是原始應用程序
好的,在這里我建議您丟棄嗅探器,並使用MITM技術。
您將需要依靠PREROUTING防火牆規則將數據包轉移到“ 代理 ”應用程序。 假設UDP,Linux,iptables和“ 代理 ”在同一主機上運行,則“ 代理 ”實際上需要執行的操作:
1.添加防火牆規則以轉移數據包(如果願意,請手動執行):
iptables -t nat -A PREROUTING -i <iface> -p <proto> --dport <dport>
-j REDIRECT --to-port <newport>
2.綁定並聽<newport>
。
3.在2個端點(客戶端和原始目的地)之間中繼所有流量。 如果要在其他主機上運行“ 代理 ”, SO_ORIGINAL_DST
getsockopt與SO_ORIGINAL_DST
一起使用以檢索原始目標地址。
這聽起來可能很棘手,但是...是的,這是因為它有點棘手:-)如果我的假設有所不同,請查閱防火牆文檔。
這只是像tcpdump
或snoop
這樣的數據包嗅探,打開一個原始套接字,並根據需要從電線和過濾器中拉出所有東西。 您可能希望使用libpcap使事情變得容易一些。
沒有管理員或超級用戶特權,您將需要目標應用程序使用適合平台的SO_REUSEADDR
和SO_REUSEPORT
打開端口。 需要注意的是,您只能接收廣播和多播數據包,單播數據包將傳遞到第一個打開的套接字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.