I have a server with two different network interfaces, each with a different IP address. How can I create a socket so it’ll go out a specific IP address?
I’d prefer a python example, but the question is language agnostic, so shoot away.
EDIT: Please don’t give me ‘You can’t’ as an answer. I mean, it is a computer. I can do anything I like to it, for example – I can programatically disable the one interface I don’t want on the fly. I’m looking for something prettier.
You can certainly bind a socket to a specific device.
I don’t know how to do it in python, but using the berkeley socket api (in C) you need to call
setsockopt(), using the optionSO_BINDTODEVICE.You pass in an interface descriptor, which is of type
struct ifreq. Ideally you would get the contents of the interface descriptor by usingioctl(), and requestingSIOCGIFINDEX– passing the name of the interface (eg. eth0) as an argument.edit: Just did a quick search and found this documentation of the socket methods in python.
setsockopt()is amongst them.