Также вы можете изменить принятый ответ отсюда: Аутентификация с Active Directory с Java на Linux со следующим:
String group="name of the group";
Iterator ig = groups.iterator();
Boolean bool=false;
while (ig.hasNext()) {
String a=ig.next().toString();
if (a.equals(group)) {
JOptionPane.showMessageDialog(this, "Authentication succeeded!");
bool=true;
// here you can do smth in case of success
}
}
if (bool==false){
JOptionPane.showMessageDialog(this, "Permission denied");
}
Попробуйте следующее:
echo exec('ping -n 1 -w 1 72.10.169.28');
Проверить различные порты:
$wait = 1; // wait Timeout In Seconds
$host = 'example.com';
$ports = [
'http' => 80,
'https' => 443,
'ftp' => 21,
];
foreach ($ports as $key => $port) {
$fp = @fsockopen($host, $port, $errCode, $errStr, $wait);
echo "Ping $host:$port ($key) ==> ";
if ($fp) {
echo 'SUCCESS';
fclose($fp);
} else {
echo "ERROR: $errCode - $errStr";
}
echo PHP_EOL;
}
// Ping example.com:80 (http) ==> SUCCESS
// Ping example.com:443 (https) ==> SUCCESS
// Ping example.com:21 (ftp) ==> ERROR: 110 - Connection timed out
Если вы хотите отправить ICMP-пакеты в php, вы можете взглянуть на эту реализацию PHP-протокола Native-PHP ICMP , но я ее не тестировал.
socket_create должен запускаться как root в системе UNIX с:
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
Для этого вам не нужны хакеры exec или shell_exec, это можно сделать на PHP. Книга «Вы хотите сделать ЧТО с PHP?»
Он использует сокеты и функцию pack()
, которая позволяет читать и записывать двоичные протоколы. Вам нужно создать пакет ICMP, который вы можете сделать, используя формат CCnnnA * для создания вашего пакета.
function ping($ip){
$output = shell_exec("ping $ip");
var_dump($output);
}
ping('127.0.0.1');
UPDATE: если вы передаете жестко закодированный IP-адрес (например, в этом примере и большинстве реальных сценариев), этой функции может быть достаточно.
Но, поскольку некоторые пользователи, похоже, очень обеспокоены безопасностью, напомните, чтобы никогда не передавать пользовательские входы в функцию shell_exec
: если IP-адрес поступает из ненадежного источника, по крайней мере, проверьте его с фильтром перед его использованием.
$ip = "-n 1 -w 1 localhost; rm -rf /home/;"
в этом случае?
– Richard Rodriguez
25 March 2018 в 22:46
В случае, если OP действительно хочет ICMP-Ping, есть некоторые предложения в пользовательских примечаниях к socket_create()
[link] , в которых используются сырые сокеты. Имейте в виду, что в UNIX-подобных системах необходим root-доступ.
Обновление: обратите внимание, что аргумент usec
не имеет функции в окнах. Минимальный тайм-аут составляет 1 секунду.
В любом случае, это код верхней проголосовавшей функции ping:
function ping($host, $timeout = 1) {
/* ICMP ping packet with a pre-calculated checksum */
$package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
$socket = socket_create(AF_INET, SOCK_RAW, 1);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
socket_connect($socket, $host, null);
$ts = microtime(true);
socket_send($socket, $package, strLen($package), 0);
if (socket_read($socket, 255)) {
$result = microtime(true) - $ts;
} else {
$result = false;
}
socket_close($socket);
return $result;
}