Одна из задач моей программы - сканировать локальную сеть Wi-Fi на предмет любых устройств / компьютеров в той же сети. Я нашел решение получить IP-адреса всех рабочих устройств, но не смог получить их имена. Я не нашел подсказки, как решить эту проблему. Какие-либо предложения?
iOS. получить другое имя устройства / компьютера по IP в той же локальной сети
comment
Как вы получили список всех работающих устройств? какой код использовался для сканирования. Я перепробовал много кода из Интернета, но не смог получить этот @Nikolay Shubenkov
- person dev   schedule 29.10.2014
comment
Определите свой IP. Если ваш IP-адрес, например, 192.168.2.44, проверьте связь со всеми IP-адресами с адресами от 192.168.2.1 до 192.168.2.255. если вам нужен код, создайте вопрос в StackOverflow, опубликуйте ссылку на этот вопрос, и я опубликую проект в github и поставлю ссылку на этот проект в ответ на ваш вопрос.
- person Nikolay Shubenkov   schedule 30.10.2014
comment
Вот ссылка на этот вопрос. @ Николай Шубенков
- person dev   schedule 11.06.2015
comment
@NikolayShubenkov вам удалось получить имя компьютера с IP-адреса?
- person Darshan Kunjadiya   schedule 16.09.2016
comment
К сожалению нет. По крайней мере, сейчас. Это довольно старый вопрос, и я не могу его перепроверить, так как проект с кодом просто не компилируется.
- person Nikolay Shubenkov   schedule 16.09.2016
comment
Удалось ли кому-нибудь получить имя хоста?
- person Mehsam Saeed   schedule 26.11.2018
Ответы (2)
Чтобы выполнить обратный поиск в DNS, вам необходимо вызвать функцию CFHostGetNames
, например:
+ (NSArray *)hostnamesForIPv4Address:(NSString *)address
{
struct addrinfo *result = NULL;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_NUMERICHOST;
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
int errorStatus = getaddrinfo([address cStringUsingEncoding:NSASCIIStringEncoding], NULL, &hints, &result);
if (errorStatus != 0) {
return nil;
}
CFDataRef addressRef = CFDataCreate(NULL, (UInt8 *)result->ai_addr, result->ai_addrlen);
if (addressRef == nil) {
return nil;
}
freeaddrinfo(result);
CFHostRef hostRef = CFHostCreateWithAddress(kCFAllocatorDefault, addressRef);
if (hostRef == nil) {
return nil;
}
CFRelease(addressRef);
BOOL succeeded = CFHostStartInfoResolution(hostRef, kCFHostNames, NULL);
if (!succeeded) {
return nil;
}
NSMutableArray *hostnames = [NSMutableArray array];
CFArrayRef hostnamesRef = CFHostGetNames(hostRef, NULL);
for (int currentIndex = 0; currentIndex < [(__bridge NSArray *)hostnamesRef count]; currentIndex++) {
[hostnames addObject:[(__bridge NSArray *)hostnamesRef objectAtIndex:currentIndex]];
}
return hostnames;
}
person
neilco
schedule
15.10.2013
Я пробовал ваш код, но всегда получаю от этой функции нулевое значение. Я пытаюсь получить имя компьютера в приложении iOS. Не могли бы вы предложить мне правильный способ найти имя компьютера. Спасибо
- person Darshan Kunjadiya; 16.09.2016
Вышеупомянутая функция не может получить имя хоста для некоторой сети в этот момент и вернуть значение null. BOOL выполнено успешно = CFHostStartInfoResolution (hostRef, kCFHostNames, NULL); если (! удалось) {вернуть ноль; }. любая идея почему
- person Mehsam Saeed; 26.11.2018
BOOL succeeded = CFHostStartInfoResolution(hostRef, kCFHostNames, NULL);
Теперь я сталкиваюсь с тем, что всегда терпит неудачу в этой строке, и я пытался использовать getnameinfo
функцию, она все еще не может получить имя хоста
person
carya.liu
schedule
28.01.2015