Другим сценарием является то, что вы нанесли нулевой объект в тип значения . Например, код ниже:
object o = null;
DateTime d = (DateTime)o;
Он выкинет NullReferenceException
в роли. В приведенном выше примере это кажется совершенно очевидным, но это может произойти в более «поздних связующих» сложных сценариях, где нулевой объект был возвращен из некоторого кода, которого вы не являетесь, и приведение, например, генерируется некоторой автоматической системой.
Одним из примеров этого является этот простой фрагмент привязки ASP.NET с элементом управления календарем:
" />
Здесь SelectedDate
на самом деле является свойством - типа DateTime
- типа Calendar
Web Control, и привязка может отлично вернуть что-то null. Неявный генератор ASP.NET создаст кусок кода, который будет эквивалентен приведенному выше методу. И это поднимет NullReferenceException
, что довольно сложно определить, потому что он лежит в сгенерированном ASP.NET коде, который компилирует отлично ...
Один IP-адрес может содержать потенциально неограниченное количество доменов. Домены, возвращенные gethostbyaddr
, будут указывать имена доменов из записей DNS PTR для этого IP-адреса. Обратная запись DNS (PTR) отображает IP-адреса для одного или нескольких доменных имен.
Одной из таких компаний, которая предоставляет информацию о доменах по IP-адресам, является domaintools.com. Вы можете заплатить за такую информацию, которую они собрали. Если имя домена отсутствует в записи PTR, то единственным способом узнать, какие домены находятся на IP-адресе, является попытка разрешить имена доменов на их IP-адреса и вести учет. AFIK нет другого способа.
См. Обратный поиск DNS и Инструменты домена обратного IP-поиска
Данные с обратной IP-поиск по инструментам домена основан на их добыче, сборе и исследованиях.
Ваш PHP правильный, earthwar.de - правильный ответ
eugen@lucidhome:~$ nslookup
> set q=ptr
> 62.75.138.253
Server: 192.168.232.1
Address: 192.168.232.1#53
Non-authoritative answer:
253.138.75.62.in-addr.arpa name = earthwar.de.
Authoritative answers can be found from:
>
Это, конечно же, не означает, что другие имена (например, german-proxy.de) не указывают на один и тот же адрес , но найти их все невозможно.
Обновление:
eugen@lucidhome:~$ nslookup
> set q=a
> german-proxy.de.
Server: 192.168.232.1
Address: 192.168.232.1#53
Non-authoritative answer:
Name: german-proxy.de
Address: 62.75.138.253
> earthwar.de.
Server: 192.168.232.1
Address: 192.168.232.1#53
Non-authoritative answer:
Name: earthwar.de
Address: 91.143.85.129
>
, поэтому это хороший пример. Факт: Нет, не так, я могу сделать это, чувак!
Могут быть МНОГИЕ имена -> IP-сопоставления, но только ONE IP-> name mapping. Это не редкость, когда вы используете хост-хост-> ip-> host lookups. Вы не можете определить, какое имя хоста указано пользователем, если только протокол, который они используют, передает это имя хоста вместе с запросом, например. http 1.1. Большинство протоколов работают исключительно с IP-адреса и не нуждаются / заботятся о именах хостов.
Вы не можете доверять имени, возвращенному gethostbyaddr. DNS-сервер с полномочиями на определенный IP-адрес может вообще вернуть любое имя хоста.
Обычно администраторы настраивают DNS-серверы для ответа с правильным именем хоста, но злоумышленник может настроить свой DNS-сервер для ответа с неправильными именами хостов. Вы можете избежать попадания в эту ловушку, когда вы вызываете gethostbyname на имя хоста, возвращаемое из gethostbyaddr, и убедитесь, что имя разрешает исходный IP-адрес.
Но есть еще ... иногда одно имя хоста может сопоставляться с несколькими IP-адресами.
var_dump(gethostbynamel('google.com'));
возвращает
array(6) {
[0]=>
string(14) "173.194.69.104"
[1]=>
string(14) "173.194.69.147"
[2]=>
string(14) "173.194.69.105"
[3]=>
string(14) "173.194.69.106"
[4]=>
string(14) "173.194.69.103"
[5]=>
string(13) "173.194.69.99"
}
В общем, вы вам нужно будет узнать о копании DNS и обратном DNS-поиске. Это долгий путь, чтобы ходить, но вы можете доверять мне, когда я говорю, что это интересно.