2009-03-10 20 views
1

Hem windows hem de linux üzerinde çalışmam gereken C++ kodu yazıyorum ve uygulamanın çalıştığı kutunun ip adresini döndürecek bir işlev çağrısı arıyorum. Böyle bir var mı? Eğer boost kullanabilirsiniz EĞERIp adresini uzak bir makineden nasıl edinirsiniz?

+0

Bu ne anlama geliyor "uzak"? – unwind

+0

Uygulamanın, üzerinde çalıştığı kutunun ipini keşfetmesini mi istiyorsunuz? Birden çok ips içeren bir kutudan ne haber? İnternette konuşan bazı ips'lere ve yerel olanlara ne dersiniz? –

cevap

1

Çağrı soketine() bakmak sonra getsockname().

+0

çapraz platform çözümü mi? –

+0

soketi() kesinlikle BSD soketlerinin bir parçasıdır ve bu yüzden çapraz platformdur - kendimi Özgür BSD'de kullandım. Google, getsockname() 'ın Linux'ta var olduğunu ve insanlarda da yer aldığını, dolayısıyla çapraz platformun da olacağını söylüyor. Bu yaklaşımı sadece genel olarak Win32'de kullandım. – sharptooth

1

Bunu yapabilirsiniz, ancak genellikle kötü bir fikirdir. "Adam netdevice" bölümünde açıklandığı gibi

ioctl SIOCGIFCONF bu açıklıyor.

bunun kötü bir fikir olmasının nedeni muhtemelen bunun dışında istediğini elde olmayacak olmasıdır.

makine hangisi (ler) vardır kamu bilmez, birkaç ya da birçok IP adresine sahip olabilir. Bir NAT geçidinin (veya birkaçının) arkasında olabilir; bu durumda hiçbiri 'un hiçbiri açık olmayabilir. Sadece özellikle faydalı bir o bilgi kullanamazsınız

. Ne için istersen, muhtemelen bunu yapmak için iyi bir fikir değil.

0

İyi fikir webservice kullanmaktır. Bilinen bir sunucuya bağlanın, iletişim kurmak için kullandığınız IP'yi geri göndermesini sağlayın. Bu, PC'nizin dış dünyayla konuşurken kullandığı IP adresini (OK, ve IP adresi) size söyleyecektir.

Olası istisnalar ve neden önemli değil:

  • Bir NAT aygıtının adresini almak - evet, bu durumda PC size ilgisi planladıklarını ne bir Internet adresi yok Muhtemelen sahip 10.xyz adresi? İnternete bağlı değiliz olarak
  • Sen, hiç bir adres alamadım - Bağlanmak olamazsa, başka bilgisayar IP adresi ile herhangi bir şey kullanışlı yapabilirdi düşüktür.
  • IP'ye geri dönüyorsunuz, ancak hiç kimse ona bağlanamaz - muhtemelen gelen bağlantıyı reddeden filtreli bir güvenlik duvarının arkasındasınız demektir. Güvenlik duvarının aynı bilgisayara bağlanan başka bir IP adresindeki trafiği kabul etmesi pek olası değildir. Bu durumda bile, keşfedilmesi imkansız olabilir. Ve FTP için cehennem olurdu.
0

Uygulamanızın makinenin adını biliyorsanız, yalnızca gethostbyname() kullanın.

İlgili konular