2016-10-27 196 views
0

我想測試客戶端/服務器和從服務器端發送udp客戶端到客戶端的流量。使用STUN發送UDP到客戶端後面的客戶端

我在本地機器上運行stun客戶端,得到如下結果。

Lenovo-Z50-70:~/iop-bb$ stun -v my_stun_server 
STUN client version 0.96 
Opened port 22948 with fd 3 
Opened port 22949 with fd 4 
Encoding stun message: 
Encoding ChangeRequest: 0 

About to send msg of len 28 to 212.227.107.179:3478 
Encoding stun message: 
Encoding ChangeRequest: 4 

About to send msg of len 28 to 212.227.107.179:3478 
Encoding stun message: 
Encoding ChangeRequest: 2 

About to send msg of len 28 to 212.227.107.179:3478 
Received stun message: 88 bytes 
MappedAddress = 41.224.250.29:22948 
SourceAddress = 212.227.107.179:3478 
ChangedAddress = 127.0.0.1:3479 
XorMappedAddress = 41.224.250.29:22948 
ServerName = Vovida.org 0.96 
Received message of type 257 id=1 
  • 在服務器端,我執行以下,回聲 「你好」 | nc -w1 -u 41.224.250.29 22944.
  • 但是,在客戶端我沒有收到數據包。 有什麼建議嗎?

    回答

    0

    在服務器端,我執行以下命令,echo「hello」| nc -w1 -u 41.224.250.29 22944

    這是否收到來自該客戶端或使用地址「41.224.250.29 22944」之前的任何數據包?如果不是,客戶端NAT將不會允許此傳入流量,除非它是全錐形NAT。客戶端使用一個可以接收來自外部源的數據包的套接字也很重要。基本上,你必須確保綁定是爲那個外部源而存在的。

    1

    您需要匹配兩端的端口,並在獲取您的公共IP和端口後執行打孔步驟。

    你運行了一個偵聽本地端口22948的stun客戶端到服務器(偵聽端口3478)。從那個端口你發送了一個stun綁定請求到你的服務器。

    該服務器的響應也迴應道:這表明你的公網IP:端口爲
    41.224.250.29 22948.

    所以,現在你知道你的本地IP(如192.168.1.2)映射到41.224.250.29和您的本地端口22948映射到公共端口22948.

    您理論上可以開始在客戶端端口22948和服務器3478之間進行通信,但服務器已在使用3478。您需要使用從STUN響應中獲得的相同端口來執行打孔步驟。

    與您其他服務的打孔步驟是這樣的。客戶端從端口22948發送到服務器(例如端口9876)。

    echo "hello there" | nc -p 22948 server 9876 
    

    服務器可以響應:

    echo "I see you" | nc -p 9876 41.224.250.29 22948