8

アプリケーションで IP アドレスを検索したい。私はそれを見つけることができます。しかし、問題は、それが iphone os 2.0 かそこらで動作することです。しかし、iphone os 3.0 では警告が表示されます。

warning: no '+currentHost' method found

warning: (Messages without a matching method signature)

このコードを使用していますが、OS バージョン 2.0 で問題なく動作します。

-(NSString*)getAddress {
char iphone_ip[255];
strcpy(iphone_ip,"127.0.0.1"); // if everything fails
NSHost* myhost = [NSHost currentHost];
if (myhost)
{
    NSString *ad = [myhost address];
    if (ad)
        strcpy(iphone_ip,[ad cStringUsingEncoding: NSISOLatin1StringEncoding]);
}
return [NSString stringWithFormat:@"%s",iphone_ip]; 

}

iPhone OS 3.0以降のOSバージョンでIPアドレスを見つける方法は?

前もって感謝します。

4

8 に答える 8

4

PHP を実行している Web サーバーにこのスクリプトを配置します。

<?php
$ip = getenv("REMOTE_ADDR");
echo $ip;
?>

デバイスでこれを呼び出します。

NSURL *scriptURL = [[NSURL alloc] initWithString:@"http://yourserver.com/script.php"]; 
NSString *ip = [NSString stringWithContentsOfURL: scriptURL encoding:NSASCIIStringEncoding error:nil];
于 2012-05-14T10:46:28.003 に答える
4

私が知る限り、それを行うハックな方法は 1 つしかありません。基本的にソケットを開き、POSIX 関数を使用してそのアドレスを取得します。これに使用したコードは次のとおりです。

http://iphonesdksnippets.com/post/2009/09/07/Get-IP-address-of-iPhone.aspx

[NSHost currentHost]も機能しますが、Apple では廃止され、「プライベート API」と見なされているため、アプリケーションを App Store に送信することはできません。

于 2010-03-02T11:45:23.090 に答える
3
- (NSString *)getIPAddress { 

NSString *address = @"error"; 
struct ifaddrs *interfaces = NULL; 
struct ifaddrs *temp_addr = NULL; 
int success = 0; 
// retrieve the current interfaces - returns 0 on success
success = getifaddrs(&interfaces); 

if (success == 0) { 
// Loop through linked list of interfaces 

    temp_addr = interfaces; 
    while(temp_addr != NULL) { 

        if(temp_addr->ifa_addr->sa_family == AF_INET) {
        // Check if interface is en0 which is the wifi connection on the iPhone
        // it may also be en1 on your ipad3.
            if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) { 
                // Get NSString from C String 
                address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 
            } 
        }

        temp_addr = temp_addr->ifa_next; 
    }
} 

// Free memory 
freeifaddrs(interfaces);
return address; 
}

これを使用して IP を取得します

エラーが発生した場合は使用してください

#include <ifaddrs.h>
#include <arpa/inet.h>
于 2011-09-05T12:48:26.393 に答える
1

IPアドレスを取得するもう1つの方法があり、それもグローバルIPです

NSString*  ip=@"http://www.whatismyip.org/";
NSURL *url = [[NSURL alloc] initWithString:ip]; 
NSString *ans = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];
NSLog(@"%@",ans);

上記のサイトは、グローバル IP を提供します。これをコードに入れて、必要な場所で IP アドレスを使用し、アプリを使用してユーザーの場所を取得するだけで、グローバル IP が得られます。

于 2011-09-25T18:06:23.377 に答える
1

この良いプロジェクトを見てください: uidevice-extension

特別にこのクラス

プロジェクトに UIDevice-Reachability.h をインポートしてから、次のコマンドのいずれかを試してください。

NSString *myIp = [UIDevice localIPAddress];
NSString *myIp = [UIDevice localWiFiIPAddress];
NSString *myIp = [UIDevice whatismyipdotcom]; // is using @aamritrao solution
于 2012-05-05T06:20:34.417 に答える
1

IP アドレスを取得するのは少し面倒です。各 iPhone に固有であり、公開 API を介して簡単に取得できるデバイス ID (UDID) を使用することはできませんか?

[UIDevice currentDevice].uniqueIdentifier

于 2010-03-14T21:00:31.683 に答える
0
bool success;
struct ifaddrs *addrs;
const struct ifaddrs *cursor;
const struct sockaddr_dl *dlAddr;
const uint8_t *base;
int i;

success = getifaddrs(&addrs) == 0;
if (success) {
    cursor = addrs;
    while (cursor != NULL) {
        if ( (cursor->ifa_addr->sa_family == AF_LINK)
            && (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type ==IFT_ETHER)
            ) {
            dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
            //      fprintf(stderr, " sdl_nlen = %d\n", dlAddr->sdl_nlen);
            //      fprintf(stderr, " sdl_alen = %d\n", dlAddr->sdl_alen);
            base = (const uint8_t *) &dlAddr->sdl_data[dlAddr->sdl_nlen];
            printf(" MAC address ");
            for (i = 0; i < dlAddr->sdl_alen; i++) {
                if (i != 0) {
                    printf(":");
                }
                printf("%02x", base[i]);
            } 
            printf("\n");
        }
        cursor = cursor->ifa_next;
    }
}
于 2011-10-01T21:02:21.593 に答える