2013-09-22 5 views
0

Я пишу приложение для Android, где мне нужно общаться с компьютером в сети Wi-Fi. Весь код находится в java, а сеть wifi - это специальная сеть. Чтобы подключиться, я начинаю с отправки запроса имени широковещательной передачи NBNS для машины, с которой я хочу подключиться, с моего телефона. В большинстве случаев это работает как ожидалось (около 3 или 4 из 5 раз). Иногда, однако, запрос имени терпит неудачу. В любом случае, когда я отправляю запрос имени, сразу после того, как я вижу пакеты запросов имени на машине, с которой я пытаюсь подключиться (используя wirehark), я вижу, что ARP-запрос выглядит как ...Android-устройство игнорирует ARP-запросы

HonHaiPr_69: a0: 67 Трансляция ARP 42 Кто имеет 192.168.1.2? Tell 192.168.1.10

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

SamsungE_75: 46: BB HonHaiPr_69: a0: 67 ARP 42 192.168.1.2 находится в 98: 0C: 82: 75: 46: бб

Как только мой телефон ответит на запрос ARP, я могу продолжить работу и общаться с компьютером. Не удалось выполнить запрос имени, хотя эти запросы ARP, похоже, игнорируются моим телефоном. Я никогда не вижу ответа ARP, и запрос NBT, который я излагаю, приводит к отключению времени. Я пробовал каждую форму инициализации дейтаграммы/сокета, доступную мне в стандартных пакетах java, и ничего не помогает. Я исследовал запись собственных пакетов ответов arp, но из-за того, где находится стек ARP, мне нужно иметь доступ к мощным программам сокетов, что означает, что я должен запустить свой телефон. Это неприемлемое решение для меня, потому что я хочу, чтобы средний пользователь Android мог использовать это приложение, не делая ничего особенного для своего телефона или сети Wi-Fi. Если кто-то из вас испытал эту проблему раньше и решил ее, не могли бы вы сообщить мне магическую формулу? Заранее благодарим за любой вклад, который вы можете предложить.

+0

Мне кажется, что это проблема с вашими сетевыми конфигурациями Android, а не с проблемой программирования. И учитывая, что у вас есть (понятно) исключение rooting устройства, проблема НЕ МОЖЕТ быть адресована в Java. –

+0

Я боюсь, что это тоже заключение, к которому я начинаю. Если это так, это проблема с Android в целом, потому что это происходит на нескольких устройствах. Это также может быть проблемой с маршрутизатором, но я не знаю, почему иногда ARP-пакеты могли бы сделать это на телефоне, а иногда нет. – JSantoro

ответ

0

Android, похоже, полностью игнорирует запрос ARP. У меня есть 3 телефона для Android и устройство хромирования в моей сети среди других устройств. Как видно ниже, устройства Android не реагируют на запрос ARP.

[email protected]:~# tcpdump -i wlan0 -v arp 
tcpdump: listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes 
13:17:00.378724 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has cheetah tell viper, length 28 
13:17:00.378747 ARP, Ethernet (len 6), IPv4 (len 4), Reply cheetah is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28 
13:17:14.969613 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has android-xxx tell viper, length 28 
13:17:32.562764 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has android-yyy tell viper, length 28 
13:17:32.606825 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has cheetah tell selvans-cc, length 28 
13:17:32.606850 ARP, Ethernet (len 6), IPv4 (len 4), Reply cheetah is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28 
13:17:45.433222 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has cheetah tell viper, length 28 
13:17:45.433243 ARP, Ethernet (len 6), IPv4 (len 4), Reply cheetah is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28 
13:18:06.065819 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has android-xxx tell viper, length 28 
13:18:17.669232 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has viper tell cheetah, length 28 
13:18:17.669716 ARP, Ethernet (len 6), IPv4 (len 4), Reply viper is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28 
13:18:20.631890 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has android-yyy tell viper, length 28 
13:18:51.639434 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has cheetah tell viper, length 28 
13:18:51.639455 ARP, Ethernet (len 6), IPv4 (len 4), Reply cheetah is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28 
13:19:02.213231 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has viper tell cheetah, length 28 
13:19:02.213762 ARP, Ethernet (len 6), IPv4 (len 4), Reply viper is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28 
+0

Я знаю, что это довольно старый пост, но я просто хотел указать, что Android 4.4 не * игнорирует ARP-запросы при подключении к сети. Однако, когда экран телефона выключен, в качестве меры экономии энергии устройство полностью отключается от сети, пока оно не понадобится, поэтому запросы ARP даже не принимаются. – DividedByZero