Можно использовать следующие регулярные выражения отдельно или путем объединения их в соединении ИЛИ выражении.
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
ValidIpAddressRegex соответствует допустимым IP-адресам и ValidHostnameRegex допустимые имена хоста. В зависимости от языка Вы используете \, придется оставить с \.
ValidHostnameRegex допустим согласно RFC 1123 . Первоначально, RFC 952 определил, что сегменты имени узла не могли запуститься с цифры.
http://en.wikipedia.org/wiki/Hostname
исходная спецификация имен узлов в RFC 952 , переданный под мандат, который маркировки не могли запустить с цифры или с дефиса и не должны заканчивать дефисом. Однако последующая спецификация ( RFC 1123 ) разрешенный имя узла маркирует для запуска с цифр.
Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";
Вы можете получить имя хоста, используя gethostname
Если вы работаете с PHP <5.3, это может помочь (по крайней мере, в системах на базе * NIX):
mscharley@S04:~$ cat test.php
#!/usr/bin/env php
<?php
function getIPs($withV6 = true) {
preg_match_all('/inet'.($withV6 ? '6?' : '').' addr: ?([^ ]+)/', `ifconfig`, $ips);
return $ips[1];
}
$ips = getIPs();
var_dump($ips);
mscharley@S04:~$ ./test.php
array(5) {
[0]=>
string(13) "72.67.113.141"
[1]=>
string(27) "fe80::21c:c0ff:fe4a:d09d/64"
[2]=>
string(13) "72.67.113.140"
[3]=>
string(9) "127.0.0.1"
[4]=>
string(7) "::1/128"
}
mscharley@S04:~$
Или, если вы не планируете делать это часто, возможно, это поможет работают (только не злоупотребляйте):
$ip = file_get_contents('http://whatismyip.org/');
Если ничего не помогает, вы всегда можете exec ipconfig или ifconfig, в зависимости от вашей платформы, и проанализировать результат.