For Programmers: Free Programming Magazines  


Home > Archive > PERL Miscellaneous > April 2007 > Can a network client specify an IP on the source side?









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Can a network client specify an IP on the source side?
yong321@yahoo.com

2007-04-28, 7:02 pm

When I initiate a network connection to a remote server, is there a
way to specify an IP address on the source side? Take a Perl snippet
as an example (modified from "Programming Perl"):

#!/usr/local/bin/perl -w
require 5.002;
use Socket;

$remote = shift || 'locahost';
$port = shift || 2345;
$iaddr = inet_aton($remote) or die "No host: $remote";
$paddr = sockaddr_in($port, $iaddr);
$proto = getprotobyname("tcp");
socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";

#Does it make sense to bind the socket with an IP on the source? How?
bind(SOCK, sockaddr_in(0, "10.6.143.111")) or die "bind: $!";

connect(SOCK, $paddr) or die "connect: $!";
print while <SOCK>;
close SOCK or die "close: $!";
exit;

I've never seen a bind() call on a client. I added it because I want
to designate a specific IP on a multihomed server. But it throws
error:

$ client.pl some.destination.example.com 22
bind: Cannot assign requested address at client.pl line <line number
pointing to the bind() line>.

That IP does exist as shown in ifconfig output. I suspect the first
argument to sockaddr() should not be 0. Any help is appreacited.

Yong Huang
[This message was posted to another group without a definitive answer]

yong321@yahoo.com

2007-04-29, 4:06 am

On Apr 28, 10:34 pm, yong...@yahoo.com wrote:
> When I initiate a network connection to a remote server, is there a
> way to specify an IP address on the source side? Take a Perl snippet
> as an example (modified from "Programming Perl"):
>
> #!/usr/local/bin/perl -w
> require 5.002;
> use Socket;
>
> $remote = shift || 'locahost';
> $port = shift || 2345;
> $iaddr = inet_aton($remote) or die "No host: $remote";
> $paddr = sockaddr_in($port, $iaddr);
> $proto = getprotobyname("tcp");
> socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
>
> #Does it make sense to bind the socket with an IP on the source? How?
> bind(SOCK, sockaddr_in(0, "10.6.143.111")) or die "bind: $!";
>
> connect(SOCK, $paddr) or die "connect: $!";
> print while <SOCK>;
> close SOCK or die "close: $!";
> exit;
>
> I've never seen a bind() call on a client. I added it because I want
> to designate a specific IP on a multihomed server. But it throws
> error:
>
> $ client.pl some.destination.example.com 22
> bind: Cannot assign requested address at client.pl line <line number
> pointing to the bind() line>.
>
> That IP does exist as shown in ifconfig output. I suspect the first
> argument to sockaddr() should not be 0. Any help is appreacited.
>
> Yong Huang
> [This message was posted to another group without a definitive answer]


In case anybody is interested, this works, thanks to liyimin41's
offline help:

bind(SOCK,sockaddr_in(0,inet_aton("10.6.143.111"))) or die "bind: $!";

Yong Huang

Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com