Resolver pro IPv4 mapované IPv6 adresy

David Rohleder davro na ics.muni.cz
Středa Prosinec 14 18:49:41 CET 2011


Pavel Kankovsky píše v St 14. 12. 2011 v 14:12 +0100:
> On Wed, 14 Dec 2011, David Rohleder wrote:
> 
> > potřeboval bych vyřešit jeden problém se $subj. Chtěl bych, aby mi byl
> > systém schopen přeložit i IPv4 mapované IPv6 adresy na jméno. Tj.
> > jesliže mám
> > 
> > 192.168.1.1 -> mujpocitac.fqdn
> > 
> > tak bych chtěl, aby mi stejným způsobem překládal i adresy
> > 
> > :ffff:192.168.1.1 -> mujpocitac.fqdn
> 
> gethostbyaddr() toto automaticky dělá (když dostane IPv6 adresu, tak by 
> se měl podívat, zda je mapovaná, a pokud ano, tak z ní extrahovat IPv4
> adresu a nadále už pracovat jen s ní) a getnameinfo() by ho měl volat,
> a tudíž by to měl umět také. (A upřímně řečeno na mých strojích to tak
> funguje: "netstat -n" vypíše např. "::ffff:195.113.28.123" a bez "-n" se
> dotáže na "123.28.113.195.in-addr.arpa" a vrátí správné jméno).
> 

Je zajímavé, že samba je jediný proces, který si otevírá jenom tcp6
socket. 

$ netstat -atn | grep 139
tcp6       0      0 :::139                  :::*             LISTEN

na IPv4 tcp žádný proces nevisí, přitom tam poslouchá. 

Ostatní démony mají otevřené oba sockety, jak IPv4, tak IPv6 a v
netstatu se zobrazují oba:
$ netstat -atn | grep 22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 192.168.1.1:22         192.168.1.2:56526      ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN     

Zajímalo by mne, jak vzniká ten rozdíl, netstat to musí nějak maskovat,
protože pro socket() neexistuje žádné univerzální volání, vždycky se
musí specifikovat AF_INET nebo AF_INET6.



> Nebo by šlo na DNS serveru vytvořit PTR záznam pro
> 1.0.1.0.8.a.0.c.f.f.f.f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa
> 

To mně nepřijde jako dobrý nápad. Myslím, že bych radši tu metodu, která
funguje sama :-)

Pro jaký program je ten netstat -n z toho tvého příkladu? Není tam číslo
portu.

Jinak je to Debian 6.0.3

Dík

David




Další informace o konferenci Linux