[Twisted-Python] Can I get the interface's IP addr from where the datagram is received?
Tommi Virtanen
tv at twistedmatrix.com
Wed Jul 6 09:21:26 MDT 2005
Eric Hsu wrote:
> I'm writting a udp server which may have multiple instances listening
> on multiple network interfaces, I need to get the network interface's
> address when datagrame received:
>
> class MyUdpServer(DatagramProtocol):
> def datagramReceived(self, data, addr):
> print "The client's addr is", addr
> print "My addr is", ???
>
> How can I retrieve the IP?
> Thanks in advance!
Assumption: you really need to know the address the packet was sent to,
and not just "(one of) my IP address(es)".
1) the portable, ugly way: iterate all local addresses, bind to each
separately, map socket fd -> IP address when receiving. Note that
modern OSes allow more than one address per interface. Sucks a lot
if anything changes during runtime, too.
2) the Linux-specific, nice way: see IP_PKTINFO in ip(7), recvmsg(2),
cmsg(3), etc. For python, use eunuchs.recvmsg, see
http://www.inoi.fi/open/trac/eunuchs
More information about the Twisted-Python
mailing list