Как программно узнать IP-адрес компа

iosif88

Well-Known Member
14.10.2009
97
1
#1
Как в скрипте узнать ip адрес пользователя? Есть такая функция которая возращает ip адрес ?
 
13.03.2009
625
2
#2
Шаг 1: Java Lib: "currentip.java"
<!--shcode--><pre><code class='java'>import java.net.InetAddress;
import java.net.UnknownHostException;

public class IPExample {
public static String IP(){
try {
InetAddress local = InetAddress.getLocalHost();
return local.getHostAddress();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
}
}[/CODE]
Шаг 2: LotusScript agent
<!--shcode--><pre><code class='vb'>(options)
Option Public
Option Declare
Uselsx "*javacon"
Use "currentip.java"
(initiailize)
Dim jSession As New JavaSession()
Dim currentip As JavaClass
Set currentip = jSession.GetClass("IPExample")
Print currentip.IP()[/CODE]
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#3

duchan

Well-Known Member
20.09.2006
108
3
#6
Вариант для LS2J:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Получить ВСЕ локальные IP (их ведь может быть и не один)...</div></div><div class="sp-body"><div class="sp-content">
Код:
Uselsx "*javacon"

Sub Initialize
Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jObject As JavaObject
Dim jObjHost As JavaObject
Dim jError As JavaError
Dim ArrObj As Variant
Dim host As String

On Error Goto errorHandler

Set jSession = New JavaSession()
Set jClass = jSession.GetClass("java/net/InetAddress")
Set jObject = jClass.CreateObject

host = jObject.getLocalHost().getHostName()


'закомментировано только для одного IP
'Если только первый и единственный, но не всегда на машине он один...
'Set jObjHost = jObject.getByName(host)
'IPAddress$ = jObjHost.getHostAddress()
'Msgbox IPAddress$

ArrObj = jObject.getAllByName(host)
For i%=0 To Ubound(ArrObj)
Set jObjHost = ArrObj(i%)
Msgbox host+" - " + jObjHost.getHostAddress()
Next
Exit Sub
errorHandler:
Set jError = jSession.getLastJavaError()
Messagebox jError.StackTrace,, Error
Exit Sub
End Sub
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#7
Недавно также понадобилось узнать имя компьютера пользователя, в форуме нашёл только эту тему. winapi не подходил (нужно было кроссплатформенное решение). На C API ничего не нашёл, потом вспомнил про яву. В итоге простенькая функция, может кому сгодится:
Код:
Uselsx "*javacon"
Function GetHostName()
Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jMethod As JavaMethod
Set jSession = New JavaSession()
Set jClass = jSession.GetClass("java.net.InetAddress")
Set jMethod = jClass.GetMethod("getLocalHost", "()Ljava/net/InetAddress;")
GetHostName = jMethod.Invoke().getHostName()
End Function
Причина редактирования — маленькая оптимизация.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#8
адаптировал код http://littletutorials.com/2008/03/10/netw...ls-with-java-6/ (он для 1.6, т.е. нотусня 8.5)
в нём закоменчено то - чего нет в jvm 1.4 (к сожалению там нет и MAC адреса и виртуальных интерфейсов)
но просто заменив мой код на код по ссылке + ф-ция outInfo() - можно сделать и для 8.5 (уже полно ф-циональную)
что сделал:
- изменил название пакеджа package sys.network.info
- дополнил методом public String[] outInfo()
- поменял итераторы на совместимые с jvm 1.4
-закоментил несуществующие в jvm 1.4 методы
- StringBuffer вместо StringBuilder (опять же - совместимость)
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"для jvm 1.4"</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>package sys.network.info;
import java.io.*;
import java.net.*;
import java.util.*;

public class NetIfInfo
{
private static final String NL = System.getProperty("line.separator");
private static final String NL_TAB = NL + " ";
private static final String IPV4 = "IPv4";
private static final String IPV6 = "IPv6";

private static class InterfaceInfo
{
public String displayName;
public String name;
public int mtu;
public boolean isUp;
public boolean isLoopback;
public boolean isPointToPoint; // e.g. a PPP modem interface
public boolean isVirtual; // a sub-interface
public boolean supportsMulticast;
public byte[] macAddress;
public List ipAddresses;
public List subInterfaces;

public String toString()
{
StringBuffer sb = new StringBuffer(NL);
sb.append("*** Interface [" + name + "] ***").append(NL);

sb.append(NL).append("display name : " + displayName);
sb.append(NL).append("MTU : " + mtu);
sb.append(NL).append("loopback : " + isLoopback);
sb.append(NL).append("point to point: " + isPointToPoint);
sb.append(NL).append("up : " + isUp);
sb.append(NL).append("virtual : " + isVirtual);
sb.append(NL).append("multicast : " + supportsMulticast);

sb.append(NL).append("HW address : ");
if (macAddress != null)
{
for (int i=0; i < macAddress.length;i++)
{
// sb.append(String.format("%1$02X ", macAddress(i)));
}
}
else
{
sb.append("n/a");
}
if (ipAddresses.size() > 0) {
Iterator addrItr=ipAddresses.iterator();
IpAddressInfo ipAddr=null;
while (addrItr.hasNext()){
ipAddr=(IpAddressInfo)addrItr.next();
sb.append(ipAddr);
}
}
if (subInterfaces.size()>0){
Iterator ifaceItr=subInterfaces.iterator();
InterfaceInfo subInfo=null;
while (ifaceItr.hasNext())
{
subInfo=(InterfaceInfo)ifaceItr.next();
sb.append(subInfo);
}
}
return sb.toString();
}
}

private static class IpAddressInfo
{
public String ipAddress;
public String ipVersion = "unknown";
public String hostName;
public String canonicalHostName;
public boolean isLoopback;
public boolean isSiteLocal; // private IP address
public boolean isAnyLocal; // wildcard address
public boolean isLinkLocal;
public boolean isMulticast;
public boolean isReachable;

public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append(NL).append("INET address ("+ ipVersion + "): " + ipAddress);
sb.append(NL_TAB).append("host name : " + hostName);
sb.append(NL_TAB).append("canonical host name : " + canonicalHostName);
sb.append(NL_TAB).append("loopback : " + isLoopback);
sb.append(NL_TAB).append("site local : " + isSiteLocal);
sb.append(NL_TAB).append("any local : " + isAnyLocal);
sb.append(NL_TAB).append("link local : " + isLinkLocal);
sb.append(NL_TAB).append("multicast : " + isMulticast);
sb.append(NL_TAB).append("reachable : " + isReachable);

return sb.toString();
}
}

private static InterfaceInfo getInterfaceInfo(NetworkInterface nif) throws IOException
{
// get interface information
InterfaceInfo info = new InterfaceInfo();
info.displayName = nif.getDisplayName();
info.name = nif.getName();
// info.mtu = nif.getMTU();
// info.isUp = nif.isUp();
// info.isLoopback = nif.isLoopback();
// info.isPointToPoint = nif.isPointToPoint();
// info.isVirtual = nif.isVirtual();
// info.supportsMulticast = nif.supportsMulticast();
// info.macAddress = nif.getHardwareAddress();
info.ipAddresses = new ArrayList();
info.subInterfaces = new ArrayList();

// get IP address information
Enumeration inetAddresses = nif.getInetAddresses();
while (inetAddresses.hasMoreElements())
{
InetAddress inetAddr = (InetAddress)inetAddresses.nextElement();

IpAddressInfo ipInfo = new IpAddressInfo();
if (inetAddr instanceof Inet4Address)
{
ipInfo.ipVersion = IPV4;
}
else if (inetAddr instanceof Inet6Address)
{
ipInfo.ipVersion = IPV6;
}
ipInfo.ipAddress = inetAddr.getHostAddress();
ipInfo.hostName = inetAddr.getHostName();
ipInfo.canonicalHostName = inetAddr.getCanonicalHostName();
ipInfo.isAnyLocal = inetAddr.isAnyLocalAddress();
ipInfo.isLinkLocal = inetAddr.isLinkLocalAddress();
ipInfo.isSiteLocal = inetAddr.isSiteLocalAddress();
ipInfo.isLoopback = inetAddr.isLoopbackAddress();
ipInfo.isMulticast = inetAddr.isMulticastAddress();
// ipInfo.isReachable = inetAddr.isReachable(5000);

info.ipAddresses.add(ipInfo);
}

// get virtual interface information
/* Enumeration subIfs = nif.getSubInterfaces();
while (subIfs.hasMoreElements())
{
NetworkInterface subIf = subIfs.nextElement();
InterfaceInfo subInfo = getInterfaceInfo(subIf);
info.subInterfaces.add(subInfo);
}
*/
return info;
}
public String[] outInfo()
{
ArrayList arr=new ArrayList();
try{
Enumeration interfaces =NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()){
NetworkInterface nif = (NetworkInterface)interfaces.nextElement();
arr.add(getInterfaceInfo(nif).toString());
// System.out.println(getInterfaceInfo(nif));
}
if (arr.size()>0){
// System.out.println("Info size:" + arr.size());
String[] res=new String[arr.size()];
arr.toArray(res);
return res;
}
}catch(IOException e){
e.printStackTrace();
}
return new String[]{};
}

public static void main(String[] args) throws IOException
{
Enumeration interfaces =NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()){
NetworkInterface nif = (NetworkInterface)interfaces.nextElement();
System.out.println(getInterfaceInfo(nif));
}
}
}[/CODE]
агент будет выглядеть как-то <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">так</div></div><div class="sp-body"><div class="sp-content">(java library назвал System.info)
Код:
Option Public
Option Declare
Use "System.info"
Sub Initialize
Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jObject As JavaObject
Dim jError As JavaError

On Error Goto ErrH

Set jSession = New JavaSession()
Set jClass = jSession.GetClass("sys/network/info/NetIfInfo")
Set jObject = jClass.CreateObject
Dim info
info=jObject.outInfo()
Dim s As String
Forall m In info
s=Chr(10) &m
Msgbox m
End Forall
Quit:
Exit Sub
ErrH:
Set jError = jSession.getLastJavaError()

If Len(jError.stackTrace)>0 Then	Messagebox jError.StackTrace,, Error:Resume Quit
Error Err, Error$ & Chr(10) & Getthreadinfo(1) & " (line " & Erl & ")"
End Sub
 

Anonimous

Well-Known Member
15.06.2012
117
0
#9
Подскажите, плиз, что надо подкрутить к библе java, чтобы использовать java.net.InetAddress, java.net.UnknownHostException.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#12
в состав LDN уже входит всё необходимое (даже компилятор javac, кот. свойственен jdk)
потому - ничего (в данном варианте) не надо туда пихать

Добавлено: на всяк случай - чуть выше я выкладывал адаптированную для jvm 1.4 версию