[erlang-questions] : : Finding IP addresses in a PC
Raimo Niskanen
raimo+erlang-questions@REDACTED
Wed Oct 4 15:39:06 CEST 2006
I was thinking more in the line of using inet_ntoa() and inet_addr(),
or rather use ntohl() and htonl() around the current fmt_addr(),
or even rewrite fmt_addr to take a char[] as input, in
network byte order.
Rewriting fmt_addr() as you suggested works on little-endian
machines such as Intel, and there are not many big-endian
Windows platforms out there, but I think it is
a confusing and wrong(tm) way to do it.
On Wed, Oct 04, 2006 at 08:25:03PM +0800, doug mansell wrote:
> yes... fmt_addr in inet_drv.c is all back-to-front!
>
> try this one instead:
>
>
> /* format address in dot notation */
> static char* fmt_addr(unsigned long x, char* ptr)
> {
> int i;
> for (i = 0; i < 4; i++) {
> int nb[3];
> int y = x & 0xff;
> x >>= 8;
> nb[0] = y % 10; y /= 10;
> nb[1] = y % 10; y /= 10;
> nb[2] = y % 10; y /= 10;
> switch((nb[2]>0 ? 3 : (nb[1]>0 ? 2 : 1))) {
> case 3: *ptr++ = nb[2] + '0';
> case 2: *ptr++ = nb[1] + '0';
> case 1: *ptr++ = nb[0] + '0';
> }
> *ptr++ = '.';
> }
> *(ptr-1) = '\0';
> return ptr;
> }
>
>
> (sorry, no patch... i'm a windows developer!) :)
>
>
>
> On 10/4/06, Raimo Niskanen <raimo+erlang-questions@REDACTED> wrote:
> > This is absolutely a bug, that we have not had time to
> > investigate. We can reproduce it easily. All windows
> > machines seem to exhibit this behaviour.
> >
> > We will see when we can find the time to correct it...
> >
> >
> >
> > On Wed, Oct 04, 2006 at 09:50:45AM +0530, Surindar Sivanesan wrote:
> > > The following code might return the correct IP by calling ip:list() from erl
> > > shell
> > >
> > >
> > >
> > > -module(ip).
> > > -export([list/0]).
> > >
> > > list()->
> > > IpAddress=inet:getiflist(),
> > > case IpAddress of
> > > {ok,IpList}->
> > > format_ip(IpList,[]);
> > > _->
> > > io:fwrite("Error ~p in getting ip list\n",[IpAddress])
> > > end.
> > >
> > > format_ip(Iplist,FormatedList)->
> > > case Iplist of
> > > []->
> > > FormatedList;
> > > _->
> > > Ip=hd(Iplist),
> > > ReversedIp=lists:reverse(string:tokens(Ip,".")),
> > > FormatedIP=check_ip(ReversedIp,""),
> > > format_ip(tl(Iplist),FormatedList++[FormatedIP])
> > > end.
> > >
> > > check_ip(IpList,Return)->
> > > case IpList of
> > > []->
> > > Return;
> > > _->
> > > IpPart=lists:reverse(hd(IpList)),
> > > case length(IpPart) of
> > > 3->
> > > NewPart=integer_to_list(list_to_integer(IpPart)),
> > > case Return of
> > > ""->
> > > check_ip(tl(IpList),Return++NewPart);
> > > _->
> > > check_ip(tl(IpList),Return++"."++NewPart)
> > > end;
> > > 2->
> > > NewPart=integer_to_list(list_to_integer(IpPart++"0")),
> > > case Return of
> > > ""->
> > > check_ip(tl(IpList),Return++NewPart);
> > > _->
> > > check_ip(tl(IpList),Return++"."++NewPart)
> > > end;
> > > 1->
> > > NewPart=integer_to_list(list_to_integer(IpPart++"00")),
> > > case Return of
> > > ""->
> > > check_ip(tl(IpList),Return++NewPart);
> > > _->
> > > check_ip(tl(IpList),Return++"."++NewPart)
> > > end;
> > > _->
> > > io:fwrite("Illegal IP length\n")
> > > end
> > > end.
> > >
> > >
> > > On 10/3/06, Shelton Tang <shelton.ms@REDACTED> wrote:
> > > >
> > > >I have one NIC with the address {192,168,0,150} on my Vista machine.
> > > >If I call inet:getiflist(), it returns
> > > >["51.0.861.291","100.0.0.721"].
> > > >
> > > >Anybody know how to convert it to a valid format?
> > > >_______________________________________________
> > > >erlang-questions mailing list
> > > >erlang-questions@REDACTED
> > > >http://www.erlang.org/mailman/listinfo/erlang-questions
> > > >
> > >
> > >
> > >
> > > --
> > > with regards,
> > > S.Surindar
> >
> > > _______________________________________________
> > > erlang-questions mailing list
> > > erlang-questions@REDACTED
> > > http://www.erlang.org/mailman/listinfo/erlang-questions
> >
> >
> > --
> >
> > / Raimo Niskanen, Erlang/OTP, Ericsson AB
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://www.erlang.org/mailman/listinfo/erlang-questions
> >
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
--
/ Raimo Niskanen, Erlang/OTP, Ericsson AB
More information about the erlang-questions
mailing list