M
Max
Коллеги, всем день добрый!
Возникла задача - получить все IP адреса сервера Domino агентом.
Можно ли это сделать?
Возникла задача - получить все IP адреса сервера Domino агентом.
Можно ли это сделать?
15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby
За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.
На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.
Запись на курс до 25 апреля. Получить промодоступ ...
можно.
Есть несколько методов. зависит от контекста
По разному. Есть проверка открытия основной БД для работы пользователей, есть запрос в консоль "удаленного" сервера (получаю диски, CPU, RAM). Получаю также список programs из АК.каким образом "стучится"?
import java.net.InetAddress;
import java.net.UnknownHostException;
public class GetIP {
public static void main(String[] args) {
InetAddress address = null;
try {
address = InetAddress.getByName("www.java2s.com");
} catch (UnknownHostException e) {
System.exit(2);
}
System.out.println(address.getHostName() + "="
+ address.getHostAddress());
System.exit(0);
}
}
самый простой способ - подключить JAVA при условии, что известен хост.
Хост можно найти в names.nsf
не надо так делать!Может все-таки LS или win API как-то использовать?
package kodiForm;
import org.apache.commons.net.util.SubnetUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.*;
import java.util.*;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static java.lang.System.out;
/**
* Created by mike on 29.10.15.
*/
class NetUtils {
private static int TIMEOUT = 500;
private static short MASQ_LIIM = 20;//limit prefix masq len for restrict lage network scan
private static final String resPath = "./res";
private static final Logger LOG = LoggerFactory.getLogger(new Throwable().getStackTrace()[0].getClassName());
private static Predicate<NetworkInterface> notLoopback = iface -> {
boolean ret = false;
try {
ret = !iface.isLoopback();
} catch (SocketException e) {
e.printStackTrace();
}
return ret;
};
private static final Predicate<NetworkInterface> notFake = iface -> {
boolean ret = false;
try {
ret = !iface.isLoopback() & !iface.isPointToPoint()
& (Collections.list(iface.getInetAddresses()).size() > 0)
& !iface.isVirtual();
} catch (SocketException e) {
e.printStackTrace();
}
return ret;
};
private static final Predicate<InterfaceAddress> masq = addr -> {
boolean ret = false;
ret = addr.getNetworkPrefixLength() >= MASQ_LIIM;
return ret;
};
private static final Predicate<InterfaceAddress> ipv4 = addr -> {
LOG.info("filter IPV4 for:" + addr.getAddress().getHostAddress());
return addr.getAddress() instanceof Inet4Address;
};
//http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/util/SubnetUtils.html
//http://stackoverflow.com/questions/2942299/converting-cidr-address-to-subnet-mask-and-network-address
/**
* @param address tested address
* @param subnet CIDR notation "192.168.0.1/16"
* @return true if included
*/
private static boolean checkIpBySubNet(String address, String subnet) {
SubnetUtils utils = new SubnetUtils(subnet);
LOG.info("Network:{}", utils.getInfo().getNetworkAddress());
return utils.getInfo().isInRange(address);
}
/**
* @param address tested address
* @param subnetaddr address from subnet (any known)
* @param mask mask
* @return true if included
*/
public static boolean checkIpBySubNet(String address, String subnetaddr, String mask) {
SubnetUtils utils = new SubnetUtils(subnetaddr, mask);
return utils.getInfo().isInRange(address);
}
/**
* @param anyIp
* @return list local interface addresses accessible for anyIp (within subnet)
* @throws SocketException
*/
public static List<String> accessibleAddresses(String anyIp) throws SocketException {
return getIfacesList().stream()
.filter(iface -> {
String cidr = String.format("%s/%s", iface.getAddress().getHostAddress()
, String.valueOf(iface.getNetworkPrefixLength()));
return checkIpBySubNet(anyIp, cidr);
})
.map(iface -> iface.getAddress().getHostAddress())
.collect(Collectors.toList());
}
public static List<String> accessibleRange(String anyIp) {
ArrayList<String> res = new ArrayList<>();
InetAddress[] addrs = null;
try {
addrs = InetAddress.getAllByName(anyIp);
} catch (UnknownHostException e) {
e.printStackTrace();
}
assert addrs != null;
for (InetAddress addr : addrs) {
try {
if (addr.isReachable(1000)) {
res.add(addr.getHostAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
return res;
}
public static List<String> accessibleRange() {
ArrayList<String> res = new ArrayList<>();
for (String saddr : getRangeFromLocal(0)) {
InetAddress addr = null;
try {
addr = InetAddress.getByName(saddr);
if (addr.isReachable(TIMEOUT)) {
res.add(addr.getHostAddress());
} else {
System.out.println("Is Not reachiable: " + addr.getHostAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
return res;
}
@SafeVarargs
private static <T> T[] concatAll(T[] first, T[]... rest) {
//http://stackoverflow.com/questions/80476/how-can-i-concatenate-two-arrays-in-java
int totalLength = first.length;
for (T[] array : rest) {
totalLength += array.length;
}
T[] result = Arrays.copyOf(first, totalLength);
int offset = first.length;
for (T[] array : rest) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.length;
}
return result;
}
private static List<NetworkInterface> getIfaces() throws SocketException {
return Collections.list(NetworkInterface.getNetworkInterfaces()).stream().filter(notFake).collect(Collectors.toList());
}
public static String[] getRangeFromLocal(int ifNum) {
String[] res = {};
NetworkInterface liface;
try {
if (ifNum >= 0) {
//liface = Collections.pinglist(NetworkInterface.getNetworkInterfaces()).get(ifNum);
//liface=NetworkInterface.getByIndex(ifNum); // by real num in interfaces pinglist
liface = getIfaces().get(ifNum);
//displayInterfaceInformation(liface);
//res=new String[]{liface.getInterfaceAddresses().get(0).getAddress().getHostAddress()};
//filter only IPV4
res = liface.getInterfaceAddresses().stream()
.filter(ipv4)
.filter(masq)
.map(a -> new SubnetUtils(a.getAddress().getHostAddress() + "/" + String.valueOf(a.getNetworkPrefixLength())).getInfo().getAllAddresses())
.reduce(new String[]{}, NetUtils::concatAll);
/*for(InterfaceAddress addr:liface.getInterfaceAddresses()){
LOG.info(addr.getAddress().getHostAddress() + "/" +addr.getNetworkPrefixLength());
res = concatAll(res,new SubnetUtils(addr.getAddress().getHostAddress() + "/" + String.valueOf(addr.getNetworkPrefixLength())).getInfo().getAllAddresses());
}*/
// res = new SubnetUtils(liface.getInterfaceAddresses().get(0).getAddress().getHostAddress() + "/" + String.valueOf(liface.getInterfaceAddresses().get(0).getNetworkPrefixLength())).getInfo().getAllAddresses();
} else {
res = Collections.list(NetworkInterface.getNetworkInterfaces()).stream()
// networkInterface.getInterfaceAddresses().stream()
.filter(notFake)
//for each interface (excluding localhost, virtual, P2P)
//return String[]
.map(iface -> {
return iface.getInterfaceAddresses().stream()
.filter(ipv4)
.filter(masq)
//for each ipv4 address on interface
.map(a -> new SubnetUtils(a.getAddress().getHostAddress() + "/" + String.valueOf(a.getNetworkPrefixLength())).getInfo().getAllAddresses())
.reduce(new String[]{}, NetUtils::concatAll);
// return new SubnetUtils(iface.getInterfaceAddresses().get(0).getAddress().getHostAddress() +
// "/" + String.valueOf(iface.getInterfaceAddresses().get(0).getNetworkPrefixLength())).getInfo().getAllAddresses();
})
//return combined String[] (for all interfaces)
.reduce(new String[]{}, NetUtils::concatAll);
}
} catch (SocketException e) {
e.printStackTrace();
}
return res;
}
private static void displayInterfaceInformation(NetworkInterface netint) {
//https://docs.oracle.com/javase/tutorial/networking/nifs/listing.html
out.printf("Display name: %s\n", netint.getDisplayName());
out.printf("Name: %s\n", netint.getName());
out.printf("Index: %s\n", netint.getIndex());
Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
for (InetAddress inetAddress : Collections.list(inetAddresses)) {
out.printf("InetAddress: %s\n", inetAddress);
}
out.printf("\n");
}
private static List<InterfaceAddress> getIfacesList() throws SocketException {
return Collections.list(NetworkInterface.getNetworkInterfaces()).stream()
// networkInterface.getInterfaceAddresses().stream()
.filter(notFake)
//for each interface (excluding localhost, virtual, P2P)
//return String[]
.flatMap(iface -> iface.getInterfaceAddresses().stream()
.filter(ipv4)
.filter(masq))
.collect(Collectors.toList())
;
}
public static void main(String args[]) throws SocketException {
//createFtpUser("test","fortestonly");
//startFtp("1680");
//accessibleRange().forEach(addr->System.out.println(addr));
Enumeration<NetworkInterface> nets = null;
try {
nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets))
if (!netint.isLoopback() & !netint.isPointToPoint()
& (Collections.list(netint.getInetAddresses()).size() > 0)
& !netint.isVirtual()) displayInterfaceInformation(netint);
} catch (SocketException e) {
e.printStackTrace();
}
if (args.length < 1) {
System.err.println("Usage: java Ping ifaceNum");
return;
}
int firstArg = -1;
if (Pattern.matches("[0-9]+", args[0])) {
firstArg = Integer.parseInt(args[0]);
}
//firstArg=-1;
out.printf("Param: %d\n", firstArg);
out.println(Arrays.toString(getRangeFromLocal(firstArg)));
//return 0;
}
}
в серверном документе не обязательно будет IPпроще брать ip из документа сервера. Если такой путь не подходит, то сделать справочник соответствия названия сервера и ip-адреса. При этом не прийдется дополнительно нагружать сервера различными расчетами
win API ... а если сервер не виндовый?
Ну можно еще извратиться через CGI...
совсем забыл..., если сервер привязан к IP (а лучше- чтобы оно так и было), то - команда nslookup <server name>
[DOUBLEPOST=1457087435,1457087377][/DOUBLEPOST]остается не раскрытой тема самой необходимости знать серверный IP
издеваетесь?nslookup - не понятно как ее подать скриптом или в консоль Domino. и как получить ответ.
ну поменяли и что? на что это повлияет?А IP мне нужно знать актуальное - т.к. у нас иногда (редко конечно - но уже пару раз натыкались) наши доблестные инфраструктурщики меняли IP-шники серваков.
издеваетесь?
nslookup системная команда, ну вот и запускать её нужно в системе Shell
LS это вполне сможет, получить резалт - можно в файл (и его распарсить)
lmike сказал(а):ну поменяли и что? на что это повлияет?
вот тогда еще больше вопросов о неприятии javaЯ только только начинаю кодить в LS. Всего естественно не знаю.
По-моему, правильнее было бы в этих базах "порядок навести". У нас тоже часто IP меняется у разных систем, то новую железку поднимут, то проапгрейдят чего-нибудь. Раньше тоже такие базы были, где IP-адреса в код зашиты - постоянно "ломались".Долго объяснять. В двух словах - Некоторый набор прикладных БД - взаимодействует используя именно IP....спасибо за идеи и "направления" куда копать.
Dim IP As String
Dim User As String
Dim Password As String
'тут определяем данные для пользователя подключения....
If (IP<>"") And (User<>"") And (Password<>"") Then 'Учетки для подключения к windows машине
Print "Подключение к серверу "+IP
Dim WBEM As New ClassWBEM '(это не родной класс Lotus, а просто мини-класс для удобства инициализации wbem-запросов - буквально несколько строк можно посмотреть в интернет как wbem - запросы формируются в LotusScript)
If wbem.ConnectToServer(IP, "", User, Password) Then
Dim Results As Variant 'массив с адресами удаленного сервера
'В запросе получаем не только все адреса но и только действующие
Set Results = wbem.query("Select IPAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'")
If Results Is Nothing Then
Print "Не удалось получить данные"
Else
ForAll objItem In Results 'перебираем полученные адреса
If FullTrim(objItem.Description)={} Then
Else
'Собственно очередной IP-адрес с удаленного сервера
Print FullTrim(objItem.Description)
End If
End ForAll
End If
End If
End If
Обучение наступательной кибербезопасности в игровой форме. Начать игру!