久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

iOS獲取設備唯一標識的實現步驟

瀏覽:157日期:2022-09-16 16:52:09
1. 常用的UUID

UDID是一個40位十六進制序列(越獄的設備通過某些工具可以改變設備的 UDID),移動網絡可以利用 UDID 來識別移動設備。

許多開發者把 UDID 跟用戶的個人信息關聯起來,網絡窺探者會從多個應用收集這些數據,然后順藤摸瓜得到這個人的許多隱私數據,同時大部分應用確實在頻繁傳輸 UDID 和私人信息。 為了避免集體訴訟,蘋果最終決定在 iOS 5 的時候,將這一慣例廢除。

獲取UUID的方法:

/** 卸載應用重新安裝后會不一致*/+ (NSString *)getUUID{ return [UIDevice currentDevice].identifierForVendor.UUIDString;;}2. MAC 地址

MAC地址,用來表示互聯網上每一個站點的標示符,是一個六個字節(48位)的十六進制序列。前三個字節是由 IEEE 的注冊管理機構 RA 負責給不同廠家分配的”編制上唯一的標示符,后三個字節由各廠家自行指派給生產的適配器接口。

MAC 地址在網絡上用來區分設備的唯一性,接入網絡的設備都有一個MAC地址,他們肯定都是唯一的。一部 iPhone 上可能有多個 MAC 地址,包括 WIFI 的、SIM 的等,但是 iTouch 和 iPad 上就有一個 WIFI 的,因此只需獲取 WIFI 的 MAC 地址就好了。一般會采取 MD5(MAC 地址 + bundleID)獲取唯一標識。

但是 MAC 地址和 UDID 一樣,存在隱私問題, iOS 7 之后,所有設備請求 MAC 地址會返回一個固定值,這個方法也不攻自破了。

獲取MAC在github找到一個挺好的方法:

2.1 首先導入下面幾個庫:

iOS獲取設備唯一標識的實現步驟

2.2 新建一個文件,繼承NSObject,在.m文件導入頭文件,以及定義一些宏

#import 'XWGetMAC.h'#import <ifaddrs.h>#import <resolv.h>#import <arpa/inet.h>#import <net/if.h>#import <netdb.h>#import <netinet/ip.h>#import <net/ethernet.h>#import <net/if_dl.h>#define MDNS_PORT 5353#define QUERY_NAME '_apple-mobdev2._tcp.local'#define DUMMY_MAC_ADDR @'02:00:00:00:00:00'#define IOS_CELLULAR @'pdp_ip0'#define IOS_WIFI@'en0'#define IOS_VPN @'utun0'#define IP_ADDR_IPv4 @'ipv4'#define IP_ADDR_IPv6 @'ipv6'

+ (NSString *)getMAC:(BOOL)preferIPv4 {return [[XWGetMAC alloc] getIPAddress:preferIPv4];}/* * 獲取設備當前網絡IP地址 */- (NSString *)getIPAddress:(BOOL)preferIPv4{ NSArray *searchArray = preferIPv4 ? @[ IOS_VPN @'/' IP_ADDR_IPv4, IOS_VPN @'/' IP_ADDR_IPv6, IOS_WIFI @'/' IP_ADDR_IPv4, IOS_WIFI @'/' IP_ADDR_IPv6, IOS_CELLULAR @'/' IP_ADDR_IPv4, IOS_CELLULAR @'/' IP_ADDR_IPv6 ] : @[ IOS_VPN @'/' IP_ADDR_IPv6, IOS_VPN @'/' IP_ADDR_IPv4, IOS_WIFI @'/' IP_ADDR_IPv6, IOS_WIFI @'/' IP_ADDR_IPv4, IOS_CELLULAR @'/' IP_ADDR_IPv6, IOS_CELLULAR @'/' IP_ADDR_IPv4 ] ;NSDictionary *addresses = [self getIPAddr];__block NSString *address; [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL * _Nonnull stop) {address = addresses[key];//篩選出IP地址格式if([self isValidatIP:address]) *stop = YES; }]; return address ? address : @'0.0.0.0';}- (BOOL)isValidatIP:(NSString *)ipAddress { if (ipAddress.length == 0) {return NO; } NSString *urlRegEx = @'^([01]?dd?|2[0-4]d|25[0-5]).' '([01]?dd?|2[0-4]d|25[0-5]).' '([01]?dd?|2[0-4]d|25[0-5]).' '([01]?dd?|2[0-4]d|25[0-5])$';NSError *error; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:&error];if (regex != nil) {NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])];return firstMatch; } return NO;}- (NSDictionary *)getIPAddr{ NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];// retrieve the current interfaces - returns 0 on success struct ifaddrs *interfaces; if(!getifaddrs(&interfaces)) {// Loop through linked list of interfacesstruct ifaddrs *interface;for(interface=interfaces; interface; interface=interface->ifa_next) { if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {continue; // deeply nested code harder to read } const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr; char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ]; if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {NSString *name = [NSString stringWithUTF8String:interface->ifa_name];NSString *type;if(addr->sin_family == AF_INET) { if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {type = IP_ADDR_IPv4; }} else { const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr; if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {type = IP_ADDR_IPv6; }}if(type) { NSString *key = [NSString stringWithFormat:@'%@/%@', name, type]; addresses[key] = [NSString stringWithUTF8String:addrBuf];} }}// Free memoryfreeifaddrs(interfaces); } return [addresses count] ? addresses : nil;}

/* * 獲取設備物理地址 */- (nullable NSString *)getMacAddress { res_9_init(); int len; //get currnet ip address NSString *ip = [self currentIPAddressOf:IOS_WIFI]; if(ip == nil) {fprintf(stderr, 'could not get current IP address of en0n');return DUMMY_MAC_ADDR; }//end if//set port and destination _res.nsaddr_list[0].sin_family = AF_INET; _res.nsaddr_list[0].sin_port = htons(MDNS_PORT); _res.nsaddr_list[0].sin_addr.s_addr = [self IPv4Pton:ip]; _res.nscount = 1;unsigned char response[NS_PACKETSZ]; //send mdns query if((len = res_9_query(QUERY_NAME, ns_c_in, ns_t_ptr, response, sizeof(response))) < 0) {fprintf(stderr, 'res_search(): %sn', hstrerror(h_errno));return DUMMY_MAC_ADDR; }//end if//parse mdns message ns_msg handle; if(ns_initparse(response, len, &handle) < 0) {fprintf(stderr, 'ns_initparse(): %sn', hstrerror(h_errno));return DUMMY_MAC_ADDR; }//end if//get answer length len = ns_msg_count(handle, ns_s_an); if(len < 0) {fprintf(stderr, 'ns_msg_count return zeron');return DUMMY_MAC_ADDR; }//end if//try to get mac address from data NSString *macAddress = nil; for(int i = 0 ; i < len ; i++) {ns_rr rr;ns_parserr(&handle, ns_s_an, 0, &rr);if(ns_rr_class(rr) == ns_c_in && ns_rr_type(rr) == ns_t_ptr && !strcmp(ns_rr_name(rr), QUERY_NAME)) { char *ptr = (char *)(ns_rr_rdata(rr) + 1); int l = (int)strcspn(ptr, '@');char *tmp = calloc(l + 1, sizeof(char)); if(!tmp) {perror('calloc()');continue; }//end if memcpy(tmp, ptr, l); macAddress = [NSString stringWithUTF8String:tmp]; free(tmp);}//end if }//end for each macAddress = macAddress ? macAddress : DUMMY_MAC_ADDR; return macAddress;}//end getMacAddressFromMDNS- (nonnull NSString *)currentIPAddressOf: (nonnull NSString *)device { struct ifaddrs *addrs; NSString *ipAddress = nil;if(getifaddrs(&addrs) != 0) {return nil; }//end if//get ipv4 address for(struct ifaddrs *addr = addrs ; addr ; addr = addr->ifa_next) {if(!strcmp(addr->ifa_name, [device UTF8String])) { if(addr->ifa_addr) {struct sockaddr_in *in_addr = (struct sockaddr_in *)addr->ifa_addr;if(in_addr->sin_family == AF_INET) { ipAddress = [self IPv4Ntop:in_addr->sin_addr.s_addr]; break;}//end if }//end if}//end if }//end forfreeifaddrs(addrs); return ipAddress;}//end currentIPAddressOf:- (nullable NSString *)IPv4Ntop: (in_addr_t)addr { char buffer[INET_ADDRSTRLEN] = {0}; return inet_ntop(AF_INET, &addr, buffer, sizeof(buffer)) ? [NSString stringWithUTF8String:buffer] : nil;}//end IPv4Ntop:- (in_addr_t)IPv4Pton: (nonnull NSString *)IPAddr { in_addr_t network = INADDR_NONE; return inet_pton(AF_INET, [IPAddr UTF8String], &network) == 1 ? network : INADDR_NONE;}//end IPv4Pton:

如果出現 “_res_9_ninit', referenced from:”這種報錯,是因為沒有添加步驟1的幾個庫

3.UUID+自己存儲3.1 獲取UUID的兩個方法

/** 卸載應用重新安裝后會不一致*/+ (NSString *)getUUID{ CFUUIDRef uuid = CFUUIDCreate(NULL); NSString *UUID = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid); CFRelease(uuid); return UUID;} /** 卸載應用重新安裝后會不一致*/+ (NSString *)getUUID{ return [UIDevice currentDevice].identifierForVendor.UUIDString;;}

很明顯UUID已經不足以支持設備的唯一性了,目前很多App都有新用戶的優惠,但是又要保證每臺設備綁定一個賬戶,如果單純使用UUID的話已經滿足不了這個需求,所以,這里需要用keychain保存,這樣即使卸載app在安裝,獲取到的UUID也是唯一性的。

3.2 首先在項目中添加 KeyChain Sharing

iOS獲取設備唯一標識的實現步驟

3.3 導入第三方庫 Security.framework

iOS獲取設備唯一標識的實現步驟

3.4 核心代碼(代碼有點多)

在github搜索SSKeychain可以找到,只要 SSKeychain.h 和 SSKeychain.m 文件即可

#import <Foundation/Foundation.h>#import <Security/Security.h>/** Error codes that can be returned in NSError objects. */typedef enum {/** No error. */SSKeychainErrorNone = noErr,/** Some of the arguments were invalid. */SSKeychainErrorBadArguments = -1001,/** There was no password. */SSKeychainErrorNoPassword = -1002,/** One or more parameters passed internally were not valid. */SSKeychainErrorInvalidParameter = errSecParam,/** Failed to allocate memory. */SSKeychainErrorFailedToAllocated = errSecAllocate,/** No trust results are available. */SSKeychainErrorNotAvailable = errSecNotAvailable,/** Authorization/Authentication failed. */SSKeychainErrorAuthorizationFailed = errSecAuthFailed,/** The item already exists. */SSKeychainErrorDuplicatedItem = errSecDuplicateItem,/** The item cannot be found.*/SSKeychainErrorNotFound = errSecItemNotFound,/** Interaction with the Security Server is not allowed. */SSKeychainErrorInteractionNotAllowed = errSecInteractionNotAllowed,/** Unable to decode the provided data. */SSKeychainErrorFailedToDecode = errSecDecode} SSKeychainErrorCode;extern NSString *const kSSKeychainErrorDomain;/** Account name. */extern NSString *const kSSKeychainAccountKey;/** Time the item was created. The value will be a string. */extern NSString *const kSSKeychainCreatedAtKey;/** Item class. */extern NSString *const kSSKeychainClassKey;/** Item description. */extern NSString *const kSSKeychainDescriptionKey;/** Item label. */extern NSString *const kSSKeychainLabelKey;/** Time the item was last modified. The value will be a string. */extern NSString *const kSSKeychainLastModifiedKey;/** Where the item was created. */extern NSString *const kSSKeychainWhereKey;/** Simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system Keychain on Mac OS X and iOS. This was originally inspired by EMKeychain and SDKeychain (both of which are now gone). Thanks to the authors. SSKeychain has since switched to a simpler implementation that was abstracted from [SSToolkit](http://sstoolk.it). */@interface SSKeychain : NSObject///-----------------------/// @name Getting Accounts///-----------------------/** Returns an array containing the Keychain’s accounts, or `nil` if the Keychain has no accounts. See the `NSString` constants declared in SSKeychain.h for a list of keys that can be used when accessing the dictionaries returned by this method. @return An array of dictionaries containing the Keychain’s accounts, or `nil` if the Keychain doesn’t have any accounts. The order of the objects in the array isn’t defined. @see allAccounts: */+ (NSArray *)allAccounts;/** Returns an array containing the Keychain’s accounts, or `nil` if the Keychain doesn’t have any accounts. See the `NSString` constants declared in SSKeychain.h for a list of keys that can be used when accessing the dictionaries returned by this method. @param error If accessing the accounts fails, upon return contains an error that describes the problem. @return An array of dictionaries containing the Keychain’s accounts, or `nil` if the Keychain doesn’t have any accounts. The order of the objects in the array isn’t defined. @see allAccounts */+ (NSArray *)allAccounts:(NSError **)error;/** Returns an array containing the Keychain’s accounts for a given service, or `nil` if the Keychain doesn’t have any accounts for the given service. See the `NSString` constants declared in SSKeychain.h for a list of keys that can be used when accessing the dictionaries returned by this method. @param serviceName The service for which to return the corresponding accounts. @return An array of dictionaries containing the Keychain’s accountsfor a given `serviceName`, or `nil` if the Keychain doesn’t have any accounts for the given `serviceName`. The order of the objects in the array isn’t defined. @see accountsForService:error: */+ (NSArray *)accountsForService:(NSString *)serviceName;/** Returns an array containing the Keychain’s accounts for a given service, or `nil` if the Keychain doesn’t have any accounts for the given service. @param serviceName The service for which to return the corresponding accounts. @param error If accessing the accounts fails, upon return contains an error that describes the problem. @return An array of dictionaries containing the Keychain’s accountsfor a given `serviceName`, or `nil` if the Keychain doesn’t have any accounts for the given `serviceName`. The order of the objects in the array isn’t defined. @see accountsForService: */+ (NSArray *)accountsForService:(NSString *)serviceName error:(NSError **)error;///------------------------/// @name Getting Passwords///------------------------/** Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn’t have a password for the given parameters. @param serviceName The service for which to return the corresponding password. @param account The account for which to return the corresponding password. @return Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn’t have a password for the given parameters. @see passwordForService:account:error: */+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;/** Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn’t have a password for the given parameters. @param serviceName The service for which to return the corresponding password. @param account The account for which to return the corresponding password. @param error If accessing the password fails, upon return contains an error that describes the problem. @return Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn’t have a password for the given parameters. @see passwordForService:account: */+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;/** Returns the password data for a given account and service, or `nil` if the Keychain doesn’t have data for the given parameters. @param serviceName The service for which to return the corresponding password. @param account The account for which to return the corresponding password. @param error If accessing the password fails, upon return contains an error that describes the problem. @return Returns a the password data for the given account and service, or `nil` if the Keychain doesn’t have data for the given parameters. @see passwordDataForService:account:error: */+ (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account;/** Returns the password data for a given account and service, or `nil` if the Keychain doesn’t have data for the given parameters. @param serviceName The service for which to return the corresponding password. @param account The account for which to return the corresponding password. @param error If accessing the password fails, upon return contains an error that describes the problem. @return Returns a the password data for the given account and service, or `nil` if the Keychain doesn’t have a password for the given parameters. @see passwordDataForService:account: */+ (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;///-------------------------/// @name Deleting Passwords///-------------------------/** Deletes a password from the Keychain. @param serviceName The service for which to delete the corresponding password. @param account The account for which to delete the corresponding password. @return Returns `YES` on success, or `NO` on failure. @see deletePasswordForService:account:error: */+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;/** Deletes a password from the Keychain. @param serviceName The service for which to delete the corresponding password. @param account The account for which to delete the corresponding password. @param error If deleting the password fails, upon return contains an error that describes the problem. @return Returns `YES` on success, or `NO` on failure. @see deletePasswordForService:account: */+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;///------------------------/// @name Setting Passwords///------------------------/** Sets a password in the Keychain. @param password The password to store in the Keychain. @param serviceName The service for which to set the corresponding password. @param account The account for which to set the corresponding password. @return Returns `YES` on success, or `NO` on failure. @see setPassword:forService:account:error: */+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;/** Sets a password in the Keychain. @param password The password to store in the Keychain. @param serviceName The service for which to set the corresponding password. @param account The account for which to set the corresponding password. @param error If setting the password fails, upon return contains an error that describes the problem. @return Returns `YES` on success, or `NO` on failure. @see setPassword:forService:account: */+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;/** Sets arbirary data in the Keychain. @param password The data to store in the Keychain. @param serviceName The service for which to set the corresponding password. @param account The account for which to set the corresponding password. @param error If setting the password fails, upon return contains an error that describes the problem. @return Returns `YES` on success, or `NO` on failure. @see setPasswordData:forService:account:error: */+ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account;/** Sets arbirary data in the Keychain. @param password The data to store in the Keychain. @param serviceName The service for which to set the corresponding password. @param account The account for which to set the corresponding password. @param error If setting the password fails, upon return contains an error that describes the problem. @return Returns `YES` on success, or `NO` on failure. @see setPasswordData:forService:account: */+ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error;///--------------------/// @name Configuration///--------------------#if __IPHONE_4_0 && TARGET_OS_IPHONE/** Returns the accessibility type for all future passwords saved to the Keychain. @return Returns the accessibility type. The return value will be `NULL` or one of the 'Keychain Item Accessibility Constants' used for determining when a keychain item should be readable. @see accessibilityType */+ (CFTypeRef)accessibilityType;/** Sets the accessibility type for all future passwords saved to the Keychain. @param accessibilityType One of the 'Keychain Item Accessibility Constants' used for determining when a keychain item should be readable. If the value is `NULL` (the default), the Keychain default will be used. @see accessibilityType */+ (void)setAccessibilityType:(CFTypeRef)accessibilityType;#endif@end3.4 創建新類,引用 SSKeychain 封裝

#import 'GetKeychain.h'#import 'SSKeychain.h'@implementation GetKeychain+ (NSString *)getDeviceUUID { NSString *currentDeviceUUIDStr = [SSKeychain passwordForService:@'項目boudle id' account:@'uuid']; if (currentDeviceUUIDStr == nil || [currentDeviceUUIDStr isEqualToString:@'']) {NSUUID *currentDeviceUUID = [UIDevice currentDevice].identifierForVendor;currentDeviceUUIDStr = currentDeviceUUID.UUIDString;currentDeviceUUIDStr = [currentDeviceUUIDStr stringByReplacingOccurrencesOfString:@'-' withString:@''];currentDeviceUUIDStr = [currentDeviceUUIDStr lowercaseString];[SSKeychain setPassword: currentDeviceUUIDStr forService:@'項目boudle id' account:@'uuid']; }return currentDeviceUUIDStr;}@end

以上就是iOS獲取設備唯一標識的實現步驟的詳細內容,更多關于iOS獲取設備唯一標識的資料請關注好吧啦網其它相關文章!

標簽: IOS
相關文章:
主站蜘蛛池模板: 色欧美日韩 | 夜夜爆操| 久久亚洲一区 | 欧美精产国品一二三区 | 国产精品视频导航 | 欧美一区二区三区四区五区 | 在线观看亚洲大片短视频 | 久久国产亚洲精品 | 国产色| 亚洲精品电影在线一区 | 综合自拍偷拍 | 黄色网在线 | 欧美一级成人欧美性视频播放 | 欧美自拍一区 | 欧美日韩在线一区 | 免费一区二区三区 | 日批的视频| 大乳videos巨大吃奶 | 99国产精品99久久久久久 | 亚洲精品亚洲人成人网 | 91观看 | 国产成人精品网站 | 综合二区 | 国产成人久久 | 毛片毛片毛片毛片毛片毛片 | av国产精品| 免费看毛片网 | 97精品视频在线 | 亚洲国产精品一区二区第一页 | 亚洲精久久| 精品久久久久久久 | 中文字幕 视频一区 | 久久精品一 | 久久一二三区 | 永久91嫩草亚洲精品人人 | 国产精品视频 | 亚洲 欧美 日韩在线 | 操操操操操操 | 国产精品毛片久久久久久 | 黄色a三级| aaa级片| 2021最新热播中文字幕-第1页-看片视频 青青青久草 | 97国产一区二区 | 91久久精品 | 91精品国产一区二区三区蜜臀 | 中文成人在线 | 亚洲精品二区 | 在线成人一区 | 亚洲精品无 | 成人精品久久久 | 91色视频在线观看 | 国产精品极品美女在线观看免费 | 国产性久久 | 日韩欧美一级片 | 另类亚洲专区 | 亚洲国产精品一区二区三区 | 日韩久久综合 | 亚洲免费网| 日韩美香港a一级毛片免费 国产综合av | 国产精品第一 | 天堂一区二区三区 | 亚洲国产成人一区二区精品区 | 久久伊 | 色综合久久久久久久久久久 | 91一区二区三区久久国产乱 | 亚洲精彩视频 | 欧美黄色一级 | 久久国产精品免费一区二区三区 | 国产91在线播放精品 | 亚洲欧美日韩国产综合 | 久久视频一区 | 久在线视频播放免费视频 | 欧美精品成人一区二区三区四区 | 97国产在线| 日韩欧美一级精品久久 | 欧美日韩成人在线视频 | 日日射av | 午夜视频在线观看网站 | 国产精品99久久久久 | 国产一区二区三区久久久 | 午夜成人免费视频 | 91在线观看免费 | 欧美日韩中文 | 日韩精品视频免费在线观看 | 99re在线| 国产一区二区视频在线观看 | 91免费视频观看 | 杨门女将寡妇一级裸片看 | 亚洲视频中文字幕 | 91久久 | 四虎在线视频 | 日韩一区精品 | 亚洲 精品 综合 精品 自拍 | 亚洲精品一区二区网址 | 中文字幕免费视频观看 | 成人免费的视频 | 中文字幕日韩久久 | 亚洲视频在线一区 | 伊人春色在线播放 | 国产精品三级久久久久久电影 | 精品久久久久久久久久久院品网 | 91久久精品国产亚洲a∨麻豆 | 黄a一级| 太子妃好紧皇上好爽h | 看欧美黄色录像 | 国产夜夜夜 | 国产在线观看 | 污污视频免费网站 | 特级淫片裸体免费看 | 伊人电影综合网 | 婷婷免费在线观看 | 午夜视频在线免费观看 | 久久综合中文字幕 | 久久久久久91香蕉国产 | 一二三精品区 | 亚洲综人网 | 一区二区三区精品视频 | 日韩欧美久久 | 91丝袜| 日韩精品一区二区三区中文字幕 | 日韩精品中文字幕在线播放 | 午夜大片网 | 亚洲毛片在线观看 | 欧美精品一二三 | 成人av观看| 成人午夜影院 | 欧美激情在线播放 | 久久久免费精品 | 91亚洲免费| 亚洲天堂一区 | 欧美一区永久视频免费观看 | av大片| 在线 亚洲 欧美 | 在线观看国精产品二区1819 | 不卡黄色 | 欧美性影院 | 国产99久久精品 | 亚洲高清视频在线观看 | 精品国产不卡一区二区三区 | 综合色婷婷一区二区亚洲欧美国产 | 日韩在线视频中文字幕 | 欧美一区二区三区 | 国产一区二区在线免费观看 | 久久精品无码一区二区日韩av | 国产精品久久久久久久久免费 | 国产色 | 亚洲在线播放 | 亚洲国产精品一区二区第一页 | 男人天堂99 | 欧美精品成人一区二区在线 | 亚洲精品福利视频 | 一级h片 | 视频二区 | 国产v片 | av在线网址观看 | 国产成人久久 | 国产午夜精品一区二区三区 | 成人精品在线视频 | 黄a在线看 | 亚洲成人三级 | 日韩福利一区 | 日韩一区二区三区在线看 | 免看一级一片 | 国产高清免费 | 精品久久精品 | 国产精品日韩欧美 | 国产高清av在线一区二区三区 | 亚洲不卡视频在线 | 中文字幕日韩在线 | 欧美激情在线观看 | 日韩精品免费观看 | 国产一级片儿 | 国产男女爽爽爽免费视频 | 久久精品久久久 | 午夜日韩在线观看 | 特黄特色大片免费视频观看 | 午夜爱视频 | 国产综合视频在线观看 | 亚洲欧美一区二区三区在线 | 91免费看| 免费看一区二区三区 | 蜜桃臀一区二区三区 | 9久久婷婷国产综合精品性色 | 欧美综合在线一区 | 亚洲专区欧美 | 男女免费在线观看视频 | 久久国产一区二区三区 | 免费xxxxx在线观看网站软件 | 美女福利视频 | 毛片日韩 | 国产精品久久 | 一区二区免费播放 | 国产精品欧美一区二区三区 | 亚洲色图图片 | 国产在线精品一区二区 | 欧美午夜一区二区三区 | 男女精品视频 | 精品国产1区2区3区 在线国产视频 | 久久精品一区二区三区四区毛片 | 九九免费观看全部免费视频 | 99这里只有精品 | 国产精品亚洲成在人线 | 国产精品久久久久久一区二区三区 | 精品在线免费视频 | 久久久久久久久久久成人 | 成人午夜在线 | 国产日韩欧美综合 | 国产精品日韩在线观看 | 国产午夜精品久久久久久久 | 久久精品欧美一区二区三区不卡 | 欧美2区 | 日韩日韩日韩日韩日韩日韩 | 精品综合久久 | 大乳videos巨大吃奶 | 成人欧美一区二区三区色青冈 | 99草草| 欧美午夜视频 | www.99| yy6080久久伦理一区二区 | 欧美不卡视频 | 欧美精品一区自拍a毛片在线视频 | 日夜夜精品视频 | 成人影院在线 | 欧美成人在线免费观看 | 国产玖玖 | www.久久精品 | 人人草视频在线观看 | 伊人网亚洲 | 一级毛片在线播放 | 色吊丝在线永久观看最新版本 | 久久久久久中文字幕 | 伊人网在线观看 | 一区二区精品视频 | 中文字幕高清在线 | 日精品| 国产精品久久久久久久久久久久 | 成人日韩| 成人片免费看 | 99精品一区二区 | 精品久久中文字幕 | 国产精品国产a级 | 欲色av | av片在线观看 | 97精品国产97久久久久久粉红 | 99视频网 | 久久99视频| 欧美日韩在线一区 | 亚洲精品国产一区 | 亚洲人人草 | 日日天天 | 在线免费观看av片 | 亚洲精品一区二区三区不 | 97国产资源 | 国产福利精品一区 | 黄视频入口 | 日本亚洲视频 | 久久久大 | 一区在线不卡 | 久久青| 91国内外精品自在线播放 | 激情五月婷婷综合 | 久久久久久九九九九九九 | 在线a视频 | 中文字幕亚洲字幕一区二区 | 久久久精彩视频 | 国产www网站 | 夜操 | 欧美激情欧美激情在线五月 | 日韩免费一区二区 | 亚洲色图图片 | 特黄视频 | 日韩精品毛片 | 狠狠操夜夜操天天操 | 国产成人精品免费 | 国产精品久久7777 | 伊人网在线免费观看 | 中文学幕专区 | 毛片网页 | 91蜜桃视频 | 亚洲一区在线日韩在线深爱 | 国产精品国产成人国产三级 | 国产成人精品亚洲777人妖 | 亚洲 欧美 日韩在线 | 一区二区欧美视频 | 日韩中文字幕在线视频 | 日韩素人在线 | 中文字幕亚洲一区二区va在线 | 亚洲自拍偷拍欧美 | 久久久国产一区二区三区四区小说 | 一级a毛片 | 一级特黄色大片 | 日本一区二区三区中文字幕 | 最新的黄色网址 | 久久国产成人 | 99久久婷婷国产综合精品 | 日韩欧美在线免费观看 | 欧美精品一区二区三区在线四季 | 亚洲高清视频在线 | 日韩一区二区三区在线视频 | 95香蕉视频 | 综合一区二区三区 | 国产精品久久久久久久久久免费看 | 91精品国产综合久久国产大片 | 午夜欧美一区二区三区在线播放 | 日韩最新网址 | 一区二区三区视频在线 | 一级人爱视频 | 草久久久| 精品久久久久久久久久久下田 | 亚洲欧美激情精品一区二区 | 国偷自产一区二区免费视频 | 国产一级视频在线观看 | 亚洲五月婷婷 | 国产视频亚洲精品 | 国产欧美日韩综合精品 | 天堂精品一区二区三区 | 精品999 | 一区二区三区欧美 | 久久国产精品久久久久久 | 国产精品成人3p一区二区三区 | 欧美一区二区三区视频 | 国产午夜精品一区二区三区嫩草 | 精品99久久| 黑人巨大精品欧美一区二区免费 | 色一情| 精品在线一区 | 成人1区2区| 97狠狠| 国产精品自产av一区二区三区 | 天天舔夜夜操 | 欧洲精品一区二区 | 色婷婷亚洲 | 欧美一区二区三区精品免费 | 一区久久 | 久久爱9191 | 午夜视频黄 | 国产精品久久久精品 | 中文字幕欧美日韩一区 | 91麻豆精品国产91久久久更新时间 | 欧美一级片免费在线观看 | 亚洲高清在线 | 黄色av网站在线免费观看 | 一级毛片免费一级 | 国产伦精品一区二区 | 国产在线资源 | 国产精品精品视频一区二区三区 | 老师的朋友2 | 可以在线观看的黄色 | 久久久精品国产 | 国产一二三区在线播放 | 国产高潮失禁喷水爽网站 | 久草电影网| 毛片久久久 | 亚洲不卡网站 | 久久久久久亚洲 | 国产中文字幕在线观看 | 亚洲精久久 | 久久久99久久 | 91精彩视频在线观看 | 亚洲国产精品一区二区三区 | 五月婷婷导航 | 国产精品1区2区 | 欧美性久久 | 国产永久免费 | 中文字幕视频 | 国产小视频在线播放 | 欧美一区2区三区4区公司二百 | 看免费的毛片 | 国产区视频在线 | 国产成人精品免高潮在线观看 | 亚洲一区二区三区在线观看免费 | 亚洲激情精品 | 成人网av| 免费毛片大全 | 五月婷婷激情 | 精品视频在线免费观看 | 北条麻妃一区二区三区在线观看 | 99re6热在线精品视频播放 | 欧美精品一区二区三区在线播放 | 亚洲一区二区福利 | 亚洲电影二区 | 欧美成人一区二区 | 一级毛片在线免费看 | 国产欧美一区二区精品性色 | 久草福利在线视频 | 在线欧美亚洲 | 人人干在线视频 | 国产精品视频久久久 | 色欧美片视频在线观看 | 久久亚洲国产精品 | 欧美中文字幕在线 | 手机看片1| 国内自拍视频在线观看 | 日韩国产在线 | 亚洲国产高清视频 | 97免费在线视频 | 色综合天天综合网国产成人网 | 一级片在线观看网站 | 黄网站免费在线观看 | 欧美一区久久 | 欧美一区二区三区国产精品 | 欧美一区二区三区成人 | 久久久久久网站 | 日韩在线播放一区 | 国产精品久久久久久久久久久免费看 | 91看片 | 日韩一级 | 色视频免费在线观看 | 欧美a在线 | 精品欧美一区二区三区久久久 | 一二区视频 | 97碰碰碰 | 国产精品www | 免费视频一区 | 亚洲a级 | 在线一级片 | 亚洲在线一区二区 | 欧美日韩在线免费 | 久久国产精品久久精品 | 欧美一区二区三 | 国产aⅴ一区二区 | h视频在线免费观看 | 91久久久久久久久 | 婷婷激情五月 | 日韩成人高清视频 | 国产午夜精品在线 | 欧美日韩一区二区三区视频 | 情五月 | 久久久999精品视频 五月天婷婷在线视频 | av中文字幕在线播放 | 午夜精品视频在线观看 | 色综合久久久 | 成人在线播放 | 禁果av一区二区三区 | 日韩精品在线观看视频 | www.欧美 | 九九热re| 欧美一级二级三级 | 国产成人免费视频网站高清观看视频 | 国产情侣一区二区三区 | 日韩网站免费观看 | 北条麻妃国产九九九精品小说 | 中文字幕一区二区三区日韩精品 | 综合久久久 | 精品国产黄a∨片高清在线 激情网站免费 | 成人精品一区二区三区中文字幕 | 国产成人片 | 日韩一区欧美 | 精品一区二区三区三区 | 欧美在线 | 亚洲 | 天堂一区二区三区在线 | 性视频网站免费 | 青草青草久热精品视频在线观看 | 国产夜夜夜 | 免费观看国产视频在线 | 后人极品翘臀美女在线播放 | 日韩视频在线一区二区 | 99视频在线免费观看 | 国产亚洲欧美在线 | 美女视频一区二区三区 | 三区在线观看 | av在线一区二区 | 久久一区二区三区四区 | 777xacom| 日韩欧美在线视频免费观看 | 国产乱码精品一区二区三 | 精品国产乱码久久久久久影片 | 91精品国产综合久久福利 | 日韩视频区 | 欧美不卡视频一区发布 | 亚洲成人av | 日本在线视频观看 | 国产精品久久久久久久久久久久久久 | 国产精品一二三四区 | 中文字幕亚洲综合 | 综合伊人 | 久久色视频 | 亚洲精品电影在线观看 | 精品久久久久久久 | 久久亚洲美女 | 97在线观看视频 | 亚洲国产成人久久一区二区三区 | av网站在线免费观看 | 中文一区 | 一级大片免费观看 | 亚洲一区在线视频 | 羞视频在线观看 | a在线免费观看 | 狠狠综合久久av一区二区小说 | 中文字幕在线三区 | 中文字幕亚洲一区 | 日本久久国产 | 91偷拍精品一区二区三区 | 亚洲国产一区二区三区在线观看 | 国产精品亚洲视频 | 久久久久国产精品视频 | 最新中文字幕 | 成人免费毛片嘿嘿连载视频 | 亚洲精品久久久久久久久 | 青青草一区二区三区 | 日韩中文不卡 | 国产欧美一区二区 | 久久精品国产v日韩v亚洲 | 中文字幕成人在线 | 九九精品视频在线观看 | 操皮视频 | 日本在线不卡视频 | 国产精品久久久久无码av | 欧美激情精品一区 | 亚洲精品片 | 99pao成人国产永久免费视频 | a久久 | 国产亚洲成av人片在线观看桃 | 精品日韩一区二区 | av中文字幕在线 | a免费网站| 人人草天天草 | 亚洲aaa| 日日干天天操 | 特级a做爰全过程片 | 精品三级在线观看 | a级黄色毛片免费观看 | 午夜视频一区 | 爱啪导航一精品导航站 | 男人阁久久 | 日韩一及片 | 日韩亚洲一区二区 | 欧美成人一区二区三区片免费 | 91精品国产91久久久久久最新 | 国产精品一码二码三码在线 | 欧美日本韩国一区二区 | 一区二区三区福利视频 | 不用播放器的免费av | 日韩高清一区二区 | 久久免费精品视频 | 日韩精品1区 | 中文字幕三区 | 亚洲成人免费网址 | 九九爱爱视频 | 精品香蕉视频 | 日本久久网站 | 美女久久久 | 国产一级片 | 国产精品成人久久久久 | 伊人网页 | 天堂资源| 欧美大片一区二区 | 成人精品一区二区三区中文字幕 | 久久极品 | 欧美日韩中文 | 日韩成人在线网 | 久久99精品久久久久蜜臀 | 成人久久久精品乱码一区二区三区 | 久久午夜电影院 | 麻豆自拍偷拍 | 免费一区二区三区 | 亚洲精品成人无限看 | 91操操| 一区二区三区免费视频网站 | 日本一区二区三区四区 | 少妇av片 | 亚洲性视屏 | 亚洲欧美一区二区三区在线 | 欧洲精品一区 | 国产激情久久久久久 | 中文字幕成人网 | 欧美成人免费在线视频 | 国产成人网 | 亚洲日本二区 | 欧美日韩中文在线观看 | 影音先锋中文字幕在线 | 国产91网址 | 不卡二区| 激情小视频在线观看 | 日韩污视频在线观看 | 在线免费观看av片 | 精品免费视频 | 伊人超碰 | 亚洲精品一区在线观看 | 欧美一区二区视频 | 成人做爰www免费看视频网站 | 伊人春色网 | 欧美日韩精品一区二区三区 | 三级网站在线播放 | 亚洲天天操 | 五月激情站| 91久久夜色精品国产网站 | 亚洲国产网站 | 久久精品综合 | 欧美v片| 国产区在线 | 国产探花在线精品一区二区 | 亚洲精选一区 | 超碰人人干 | 日韩中文在线视频 | 91精品一区二区三区久久久久久 | 中文字幕在线资源 | 久久精品免费一区二区三区 | 中文字幕在线第一页 | 亚洲人成人一区二区在线观看 | 伊人手机在线视频 | 日韩在线免费观看网站 | 日韩视频中文字幕 | 亚洲国产精品久久 | 黄色小视频免费观看 | 亚洲无吗电影 | 亚洲一区二区三区在线播放 | 精品免费视频一区二区 | 日本精品国产 | 欧洲成人在线视频 | 国产午夜精品一区二区三区 | 国产日韩欧美91 | 黄色永久网站 | 国内外成人在线视频 | 国产一区二区三区久久久 |