Как получить адрес и IP-адрес, используя node.js или Angular [duplicate]

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

24
задан Community 4 February 2014 в 22:59
поделиться

3 ответа

Это зависит от настроек вашей сети. Но, вероятно, нет.

Ниже приведен краткий обзор Ethernet и IP. MAC-адрес является уникальным адресом сетевой карты. Он используется для определения того, для какого пользователя в сегменте сети есть пакет. Вы можете использовать ARP для получения MAC-адреса для IP-адреса. Но это работает, как ожидалось, только если вы находитесь в одном и том же сетевом сегменте.

Итак, вопрос в том, что такое сегмент сети? Это зависит от технологии, которую вы используете, но здесь есть общие случаи. Вся беспроводная сеть является сегментом сети. Каждый пользователь сети может разговаривать через Ethernet с каждым другим пользователем. В проводных сетях это зависит от оборудования. Если у вас хороший старый BNC или концентратор, у вас есть один сегмент сети со всеми видами использования. Снова каждый пользователь может разговаривать с любым другим. С коммутатором в сети сегмент сети представляет собой только кабель, который соединяет вас с коммутатором. Здесь вы можете разговаривать только с коммутатором через Ethernet. Каждому пользователю требуется как минимум IP.

Слишком плохо, что в большинстве ситуаций с HTTP, который строит на TCP / IP, вы никогда не находитесь в том же сегменте сети, что и ваш пользователь, 99,99%. Вы можете использовать ARP, но получите только MAC-адрес первого хопа. Лучше, в зависимости от вашего оборудования, вы даже не можете быть в IP-сети, основанной на Ethernet; ATM, например ...

39
ответ дан Beatles1692 18 August 2018 в 03:28
поделиться
  • 1
    Привет, Шон, Спасибо, что смутили ситуацию дальше! lol, не серьезно, хороший информативный пост, ура – Richard.Gale 22 July 2010 в 15:07
  • 2
    А? Wha? Если вы не используете метод, который можно считать нарушением основной конфиденциальности пользователей, например установка плагина / active-x / tojan в системе пользователя, ответ будет следующим: Нет, технически невозможно . Я только пытался объяснить, почему ... Может быть, вы или кто-то еще может учиться и понимать ... – rioki 22 July 2010 в 19:41
  • 3
    Я думаю, что это не совсем правильно: порты коммутатора - это не один и тот же сегмент, однако можно говорить через Ethernet между разными портами коммутаторов. Для этого есть кеш ARP. – EFraim 27 September 2015 в 21:54

Я не думаю, что есть способ сделать это в ASP.NET. MAC является свойством TCP-пакета, а на уровне HTTP нет пакетов или MAC-адресов (например, один HTTP-запрос может быть собран из нескольких TCP-пакетов).

Вы можете попробовать использовать пакет sniffer (например, WireShark) для захвата пакетов TCP, а затем проанализировать их, чтобы извлечь MAC-адреса и сопоставить их с HTTP-запросами.

В любом случае вы не получите никаких полезных данных, если пользователь не находится в одном и том же сегменте сети как ваш сервер.

UPD. Как отмечалось в комментариях, я перепутал сетевые уровни. MAC-адрес является свойством Ethernet-фрейма , а не TCP-пакетом. Однако заключение все же является правильным.

1
ответ дан VladV 18 August 2018 в 03:28
поделиться
  • 1
    MAC-адрес находится в пакете tcp? С каких пор? MAC-адреса от гораздо более низкого транспортного уровня и даже не в заголовке IP-пакета. – Christopher Creutzig 22 July 2010 в 14:39
  • 2
    Да, MAC-адреса очень низкого уровня – Richard.Gale 22 July 2010 в 15:08
  • 3
    Он имел в виду пакет в целом. В случае с TCP у вас нет пакетов, это поток. В случае с IP у вас есть фреймы ... И обычно вы не можете получить доступ к любому из них в коде режима пользователя. – rioki 22 July 2010 в 19:45
  • 4
    @ChristopherCreutzig Существует только один транспортный уровень. – shiva 16 March 2017 в 18:11
  • 5
    @shiva Правильно, мое плохое. Транспортный уровень не использует MAC-адреса, однако они используются только на сетевом уровне. который, я также должен сказать, не «намного» ниже ... – Christopher Creutzig 21 March 2017 в 20:04

Это невозможно, если вы не собираетесь создавать компонент ActiveX, и в этом случае он будет работать только в IE.

0
ответ дан zahstra 18 August 2018 в 03:28
поделиться
  • 1
    Компонент activeX не может быть и речи, но может ли использоваться MAC-адрес? – Richard.Gale 22 July 2010 в 14:17
  • 2
    пригодный для использования? – nos 22 July 2010 в 14:22
  • 3
    проверяя vs значение, хранящееся в базе данных? – Richard.Gale 22 July 2010 в 14:32
Другие вопросы по тегам:

Похожие вопросы: