-module(utSocket).
|
|
|
|
-export([
|
|
socketToIpStr/1
|
|
, socketToIpTuple/1
|
|
, socket2port/1
|
|
, str2ip/1
|
|
, ipToStr/1
|
|
]).
|
|
|
|
|
|
%% socket转IP
|
|
socketToIpStr(Socket) ->
|
|
try {ok, {TIp, _TPort}} = inet:peername(Socket), ipToStr(TIp)
|
|
catch _:_ ->
|
|
try {ok, {SIp, _SPort}} = ssl:peername(Socket), ipToStr(SIp)
|
|
catch _:_ ->
|
|
"0.0.0.0"
|
|
end
|
|
end.
|
|
|
|
ipToStr({A, B, C, D}) ->
|
|
<<_:8, IpStr>> = <<<<".", (integer_to_binary(O))/binary>> || O <- [A, B, C, D]>>,
|
|
IpStr;
|
|
ipToStr(Ip) ->
|
|
<<_:8, IpStr>> = <<<<":", (integer_to_binary(O, 16))/binary>> || O <- tuple_to_list(Ip)>>,
|
|
IpStr.
|
|
|
|
%% 获取ip
|
|
socketToIpTuple(Socket) ->
|
|
try {ok, {TIp, _TPort}} = inet:peername(Socket), TIp
|
|
catch _:_ ->
|
|
try {ok, {SIp, _SPort}} = ssl:peername(Socket), SIp
|
|
catch _:_ ->
|
|
{0, 0, 0, 0}
|
|
end
|
|
end.
|
|
|
|
socket2port(Socket) ->
|
|
case inet:peername(Socket) of
|
|
{ok, {_, Port}} -> Port;
|
|
_ -> 0
|
|
end.
|
|
|
|
str2ip(IP) when is_list(IP) ->
|
|
[A1, A2, A3, A4] = string:tokens(IP, "."),
|
|
{list_to_integer(A1), list_to_integer(A2), list_to_integer(A3), list_to_integer(A4)};
|
|
str2ip(IP) when is_tuple(IP) ->
|
|
IP.
|