Obtaining Own External IP Address in POSIX C

前端 未结 6 1661
长发绾君心
长发绾君心 2021-01-06 19:48

I\'m looking to obtain my own IP address in order to publish that information in to a Peer-to-Peer network. In POSIX/C we have getaddrinfo(NULL, ...), but this

相关标签:
6条回答
  • 2021-01-06 20:35

    I'm not trying to make things more complicated though I should point out that a single computer can have several IP addresses. typically each network card will have one.

    a more specific way to ask would be "how do I find the IP address that will be used as the source address when I connect to foo.com.org" I like bortzmeyer's answer for this :)

    0 讨论(0)
  • 2021-01-06 20:35

    Did you check ai_next field of returned structure?

    getaddrinfo() returns linked list of addresses.

    0 讨论(0)
  • 2021-01-06 20:41

    By public address, you're saying, an address that your application's peers can contact you with. The only full-proof way is to connect to a known "external" peer and have it send your address back to you.

    0 讨论(0)
  • 2021-01-06 20:42

    Create a UDP socket, bind() to INADDR_ANY, connect() to some address on the internet, then use getsockname() on the socket to find out what address it was assigned.

    Another good solution, if the network's protocol supports it, is to just ask your bootstrapping peers what they think your IP is. This takes care of NATs automatically.

    0 讨论(0)
  • 2021-01-06 20:45

    If you know the name your host, you can use gethostbyname to get the ip address.

    0 讨论(0)
  • 2021-01-06 20:47

    One of the problems is that, even if you get the local IP address, the IP address seen by the rest of the Internet may be different, because of the kludge of NAT which is unfortunately very common. Using IPv6 probably will suppress this problem but it may not be an option for you, now.

    To get the public IP address, you will need a protocol made for that purpose such as STUN (RFC 5389). There are public STUN servers and already existing STUN clients in C.

    All the peer-to-peer programs have similar issues, so learn what others are doing, I strongly recommend reading RFC 5128, "State of Peer-to-Peer (P2P) Communication across Network Address Translators (NATs)".

    0 讨论(0)
提交回复
热议问题