2021年1月11日 星期一

libnice的編譯和簡單範例使用

最近在研究穿透防火牆,找到libnice這個library,試過是可以用的,可以省掉不少事。

libnice是一個ICE實現庫。它實現了交互式連接建立(ICE)標準(RFC 5245)和NAT會話遍歷實用程序(STUN)標準(RFC 5389)。

官網地址:https://libnice.freedesktop.org/

原始碼庫地址:https://gitlab.freedesktop.org/libnice/libnice/

1.下載源碼:

git clone https://gitlab.freedesktop.org/libnice/libnice.git

2.編譯:

2.1. linux平台下:

depend on:

  •  glib> = 2.10
  •  pkg-config
  •  gupnp-igd> = 0.1.2(可選)
  •  gstreamer-0.10> = 0.10.0(可選)
  • gtk-doc-tools#autogen.sh需要

2.2. 編譯

如果缺的話就需要

  • apt-get install automake
  • apt-get install gtk-doc-tools
  • apt-get install build-essential libtool

開始編譯

k@k10:/home/libnice$ ./autogen.sh

k@k10:/home/libnice$ ./configure

k@k10:/home/libnice$ make

k@k10:/home/libnice$ make install

3.生成的程序和庫

在nice / .libs目錄下生成靜態庫libnice.a,動態庫libnice.so

在example目錄下生成三個示例程序。

4.示例程序的使用

k@k-C410:/home/libnice/examples$ ./simple-example 0 stunserver.org

Copy this line to remote client:

  Tyyp 33oInvKVEn1Lo6LkVVy6P5 1,2013266431,192.168.10.17,47748,host

Enter remote data (single line, no wrapping):

>

橘色部分錶示提供給對等端協商時的驗證用戶名,密碼,外網地址,以空格分隔。

實際操作啟動二個實例(同網域或不同網域皆可),就可以開始p2p對話了:

第一個控制台:

k1@k-C410:/home/libnice/examples$ ./simple-example 0 stunserver.org

Copy this line to remote client:

  Tyyp 33oInvKVEn1Lo6LkVVy6P5 1,2013266431,192.168.10.17,47748

Enter remote data (single line, no wrapping):

> h4p1 7M8uL1928RzeRv6cWRDqG8 1,2013266431,192.168.10.17,47758

Negotiation complete:([192.168.10.17]:47748,[192.168.10.17]:47758)

Send lines to remote (Ctrl-D to quit):

>a


第二個控制台:

k2@k-C410:/home/libnice/examples$ ./simple-example 0 stunserver.org

Copy this line to remote client:

  h4p1 7M8uL1928RzeRv6cWRDqG8 1,2013266431,192.168.10.17,47758

Enter remote data (single line, no wrapping):

> Tyyp 33oInvKVEn1Lo6LkVVy6P5 1,2013266431,192.168.10.17,47748

Negotiation complete:([192.168.10.17]:47758,[192.168.10.17]:47748)

Send lines to remote (Ctrl-D to quit):

>b

 

存在的問題:在linux下,stun服務器地址不能通過域名解析到IP地址,解決方法是,直接用stun服務器的IP地址。



handle->agent = g_object_new(NICE_TYPE_AGENT, "compatibility", NICE_COMPATIBILITY_DRAFT19, "main-context", icectx, "reliable", FALSE, "full-mode", TRUE, "ice-udp", TRUE, "ice-tcp", FALSE, NULL);
REF

沒有留言:

張貼留言