2

PJSIP/PJNATH ポート パンチング ライブラリ (STUN/TURN/ICE 用) を使用しており、パンチされたポートを介して独自の UDP ベースのトランスポートを作成したいと考えています。

NAT マッピングの内部ポートを保持するデータ構造が見つかりません。内部ポート (両側) が必要な理由は、UDP ソケットを内部ポートにバインドするためです (OS がランダムなポートを選択するのではなく)。図を参照してください。

icedemoサンプル アプリは、(ポートをパンチした後) インターネット上でデータを送受信できることがわかりました。そのため、内部 UDP ポートにバインドする必要があります。内部ポートを保持しているデータ構造を知る必要があるだけです。 NAT マッピングの内部ポート

ファイル内のpj_ice_sess_send_data関数は、ice_session.c変数をダンプする有望な場所のように見えました。ただし、NAT マッピングの内部ポートを含むものはありません。

//my attempt did *not* work
pj_ice_sess_cand *cand;
cand = comp->valid_check->lcand;
char addrinfo[80];
pj_sockaddr_print(&cand->base_addr, addrinfo, sizeof(addrinfo), 3);
printf("***Local address %s\n", addrinfo);

参考までに、パブリック IP:Port はすぐに利用できます。

背景
PJNATH ライブラリは、標準ベースの STUN/TURN/ICE プロトコルを実装し、両側からホスト/サーバーリフレクティブ/リレー IP:ポートを交換した後、ICE-UDP チェックを使用して UDP ポートをパンチします。

4

2 に答える 2

1

bound_addr構造体のpj_sockaddr のようpj_stun_sock_cfgです。

docsによると、「ポートがゼロに設定されている場合、ソケットは任意のポートでバインドされます (OS によって選択されます)。」

于 2014-07-15T04:48:42.320 に答える