On 27Oct2015 10:00, Robin Becker <ro...@reportlab.com> wrote:
On 26/10/2015 22:29, Cameron Simpson wrote:
On 26Oct2015 12:33, Robin Becker <ro...@reportlab.com> wrote:
.............
........
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:.......4 GB)
        Interrupt:16

eth0:0    Link encap:Ethernet  HWa.......

Do you need to bind to the device itself? Using the correct IP address should
normally be sufficient. The system you're talking to won't know anything about
the device, only the address. Try skipping the device binding step.

According to the stackoverflow articles here

http://stackoverflow.com/questions/335607/how-do-i-make-an-outgoing-socket-to-a-specific-network-interface

http://stackoverflow.com/questions/8437726/can-python-select-what-network-adapter-when-opening-a-socket

binding to the local IP seems to be a windows only thing.

No, it is a pretty standard BSD socket layer thing. (Windows got its original TCP stack from there too). I just tested a Linux RHEL6 host binding to a specific address just now using telnet:

 /usr/bin/telnet -b x.x.x.193 x.x.x.174 22

where the .193 is not the primary address - it is an additional local address. The connection was correctly received by the target as from the alias address, not the base address:

 Oct 28 10:28:18 HOSTNAME sshd[7531]: Connection from x.x.x.193 port 61621

An strace says:

 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3 bind(3, {sa_family=AF_INET, 
sin_port=htons(0), sin_addr=inet_addr("203.166.218.193")}, 16) = 0

 setsockopt(3, SOL_IP, IP_TOS, [16], 4)  = 0

 connect(3, {sa_family=AF_INET, sin_port=htons(22), 
sin_addr=inet_addr("203.166.218.174")}, 16) = 0

so you can see it just binds the source address and goes. No device names involved.

I have tried just binding to the local IP, but my packets were from the default address (the one connected to eth0). After reading the 8437726 article again I think I may be on the wrong track anyway.

Please show me the exact code you're using. This really should work without annoying "device" binding.

The counter examples in the articules you cite are for particularly weird circumstances, such as where the routing table cannot correctly deduce the interface (distinct attached networks with the _same_ network numbering - ghastly). They don't say "binding to the local IP seems to be a windows only thing" that I can see.

Please post your failing code. I suspect you're missing something.

Cheers,
Cameron Simpson <c...@zip.com.au>
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to