簡體   English   中英

C ++ UDP套接字端口多路復用

[英]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 getsockoptSO_ORIGINAL_DST一起使用以檢索原始目標地址。

這聽起來可能很棘手,但是...是的,這是因為它有點棘手:-)如果我的假設有所不同,請查閱防火牆文檔。

這只是像tcpdumpsnoop這樣的數據包嗅探,打開一個原始套接字,並根據需要從電線和過濾器中拉出所有東西。 您可能希望使用libpcap使事情變得容易一些。

沒有管理員或超級用戶特權,您將需要目標應用程序使用適合平台的SO_REUSEADDRSO_REUSEPORT打開端口。 需要注意的是,您只能接收廣播和多播數據包,單播數據包將傳遞到第一個打開的套接字。

不是多路復用-該術語保留用於在同一過程中處理多個通道上的I / O,而select(2)poll(2)類的東西最有用。

您要的是多播 是基本示例。

請注意,IP為多播保留了一個特殊的地址范圍(即組)。 這些被映射到特殊的以太網地址。 偵聽器必須加入多播組,而發送者不必加入 ,而只是照常發送。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM