|
|
@ -5,33 +5,37 @@ |
|
|
|
, socketToIpTuple/1 |
|
|
|
, socket2port/1 |
|
|
|
, str2ip/1 |
|
|
|
, ipToStr/1 |
|
|
|
]). |
|
|
|
|
|
|
|
|
|
|
|
%% socket转IP |
|
|
|
socketToIpStr(Socket) -> |
|
|
|
case inet:peername(Socket) of |
|
|
|
{ok, {{A, B, C, D}, _}} -> |
|
|
|
string:join(lists:map(fun com_type:to_list/1, [A, B, C, D]), "."); |
|
|
|
_ -> |
|
|
|
"" |
|
|
|
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) -> |
|
|
|
case catch inet:peername(Socket) of |
|
|
|
{ok, {Ip, _Port}} -> |
|
|
|
Ip; |
|
|
|
_ -> |
|
|
|
case catch ssl:peername(Socket) of |
|
|
|
{ok, {Ip, _Port}} -> |
|
|
|
Ip; |
|
|
|
_ -> |
|
|
|
{0, 0, 0, 0} |
|
|
|
end |
|
|
|
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; |
|
|
|