LINUX.ORG.RU

WebRTC адрес от браузера

 


0

1

Приветствую.

Передаю браузеру кандидатов в sdp виде

...
a=setup:passive
a=ice-ufrag:IT54
a=ice-pwd:OnFL2Ee+hnsKEX4xh+jl4e
a=candidate:1 1 UDP 2013266431 fe80::ca4d:44ff:fe20:1e8b 39133 typ host
a=candidate:2 1 TCP 1015023359 fe80::ca4d:44ff:fe20:1e8b 9 typ host tcptype active
...и тд...
a=end-of-candidates
a=send

Все ок, браузер понял, отвечает мне своим кандидатом

...
a=candidate:3891818760 1 udp 2113937151 f971c089-ea36-4c38-8395-864a79fc694f.local 60013 typ host generation 0 network-cost 999
a=ice-ufrag:EU/h
a=ice-pwd:z+rv7a3jPh/i9bzs9JGJHS0a
a=ice-options:trickle
...

Как теперь вот это f971c089-ea36-4c38-8395-864a79fc694f.local непонятное, конвернуть в то, что поймет getaddrinfo ? И что вообще это такое и с чем едят?

★★★

у хрома в chrome://flags дефолтово выставлен флаг «anonymize local ips exposed by webrtc», вот он и кидает в кандидаты mDNS адреса, как верно заметили в комментах. Можно попробовать цепляться не по link-local, а хотя бы по ULA, чтобы хром не думал, что эти айпишники локальные и не применял эту настройку.

gr_buza ★★★★
()
Ответ на: комментарий от gr_buza

спасибо, попробую, но отрезовлить это корявое имя не получилось

        if (g_str_has_suffix(addr, ".local"))
        {
            GError * err = NULL;
            GResolver * resolver = g_resolver_get_default();
            GList * ips = g_resolver_lookup_by_name(resolver, addr, NULL, &err);
            //g_object_unref(resolver);
            if (ips)
            {
                for (GList * ip = ips; ip; ip = ip->next)
                {
                    g_printerr("###%s###\n", g_inet_address_to_string(ip->data));
                }
                g_resolver_free_addresses(ips);
            }
            else
            {
                g_printerr("ERROR lookup (%s)\n", err->message);
                g_error_free(err);
                goto END;
            }
        }

wolverin ★★★
() автор топика
Ответ на: комментарий от gr_buza

у хрома в chrome://flags дефолтово выставлен флаг

что то начинаю припоминать эту проблему, когда janus на soc запускал 4 года назад…

цепляться не по link-local, а хотя бы по ULA

если не сложно, можно поподробности в качестве ликбеза??? так то хром еще до оправки своего answer уже цепляется к порту и по идеи наверное можно вытащить его адрес уже из сокета…

wolverin ★★★
() автор топика
Ответ на: комментарий от anonymous

в локальном это каком? на той машине под виндой, откуда хром это отправляет такое имя не резолвится, как наблюдаю оно вообще часто разное, почему бы не брать реальное доменное имя из системы!? оно бы хоть нормально отрезолвилось.

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)
Ответ на: комментарий от imatveev13

Броузер должен еще кандидатов прислать с нормальным IP адресом.

ну вроде как при a=ice-options:trickle должен

var loger = document.getElementById('loger');
var answer = document.getElementById('answer');

var peer = new RTCPeerConnection(config);

	peer.onicecandidate = ev => {
		if (ev.candidate) {
			loger.value += '\n' + ev.candidate.candidate + '\n';
		} else {
			loger.value += '\nice event phase = ' + ev.eventPhase + '\n';
			let sdp = peer.localDescription.sdp;
			sendTextToMQTT(topic_pub, '>' + topic_sub + '>' + sdp);
			answer.value = sdp;
		}
	};

но по факту его нет, при этом подключение производит еще до того, как его ансвер придет, т.к. соединение локальное, а сигнализация через брокера.

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

если не сложно, можно поподробности в качестве ликбеза??? так то хром еще до оправки своего answer уже цепляется к порту и по идеи наверное можно вытащить его адрес уже из сокета…

в целом наверное если пиры в одном l2-сегменте, то там всяко будут link-local адреса, даже если на интерфейсах есть другие адреса. Надо посмотреть стандарты :)

gr_buza ★★★★
()