久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

Java手寫(xiě)DHCP服務(wù)器:報(bào)文解析與租約管理的完整實(shí)踐

Java手寫(xiě)DHCP服務(wù)器:報(bào)文解析與租約管理的完整實(shí)踐 簡(jiǎn)介面向DHCP協(xié)議與Java網(wǎng)絡(luò)編程開(kāi)發(fā)者提供一套可直接運(yùn)行的DHCP服務(wù)器與客戶(hù)端源代碼適合用于課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)以及企業(yè)內(nèi)網(wǎng)管理工具的二次開(kāi)發(fā)參考。壓縮包共84個(gè)文件大小僅186KB其中包含16個(gè)Java源文件作為核心實(shí)現(xiàn)代碼64個(gè)HTML格式的Javadoc頁(yè)面用于查閱類(lèi)與接口說(shuō)明另含CSS樣式、properties配置和GIF圖片等輔助文件整體結(jié)構(gòu)清晰便于按需取用。代碼完整實(shí)現(xiàn)了DHCP發(fā)現(xiàn)、提供、請(qǐng)求、確認(rèn)四個(gè)階段讀者可學(xué)習(xí)到基于UDP廣播的報(bào)文交互、BOOTP協(xié)議的編解碼方式以及服務(wù)器端多線(xiàn)程并發(fā)處理和IP地址池的動(dòng)態(tài)分配策略。通過(guò)閱讀源碼和文檔既能掌握DatagramSocket、NIO等網(wǎng)絡(luò)編程技巧也能理解真實(shí)協(xié)議落地時(shí)的異常處理、配置存儲(chǔ)等工程問(wèn)題為深入網(wǎng)絡(luò)協(xié)議開(kāi)發(fā)打下基礎(chǔ)。截至當(dāng)前已有632人學(xué)習(xí)使用是一份實(shí)用且輕量的協(xié)議源碼學(xué)習(xí)資料。1. 當(dāng)你的設(shè)備拿不到 IPJava 手寫(xiě) DHCP 到底在做什么排查網(wǎng)絡(luò)時(shí)最讓人血壓飆升的場(chǎng)景之一就是終端瘋狂廣播 DHCP Discover 卻始終收不到 Offer。抓包一看服務(wù)器根本沒(méi)回應(yīng)或者回應(yīng)了但報(bào)文格式錯(cuò)得離譜。這時(shí)候你如果能有一份 Java 實(shí)現(xiàn)的 DHCP 源代碼在手可以直接在 JVM 里跑起來(lái)調(diào)試比反復(fù)翻 RFC 2131 和路由器日志要直觀得多。DHCP 協(xié)議本身不復(fù)雜復(fù)雜的是 UDP 廣播、報(bào)文選項(xiàng)解析、租約狀態(tài)機(jī)這些細(xì)節(jié)在 Java 里怎么落地。這個(gè)方向的價(jià)值在于它不是讓你去替代現(xiàn)成的 dhcpd 或路由器內(nèi)置服務(wù)而是幫你理解協(xié)議交互的每一幀報(bào)文、每一個(gè)狀態(tài)轉(zhuǎn)換。無(wú)論是做網(wǎng)絡(luò)設(shè)備模擬器、接入認(rèn)證系統(tǒng)、還是在測(cè)試環(huán)境里模擬 DHCP 攻擊與防護(hù)場(chǎng)景一份能跑的 Java 源碼都是最直接的學(xué)習(xí)和調(diào)試工具。適合的人群是網(wǎng)絡(luò)協(xié)議棧開(kāi)發(fā)者、物聯(lián)網(wǎng)設(shè)備接入層的工程師以及那些在面試?yán)锉粏?wèn)到「DHCP 報(bào)文是怎么組裝和解析的」之后想弄個(gè)明白的 Java 后端。2. 實(shí)現(xiàn)前必須吃透的 DHCP 報(bào)文結(jié)構(gòu)從 BOOTP 到選項(xiàng)域的字節(jié)級(jí)拆解2.1 為什么 DHCP 報(bào)文要用字節(jié)數(shù)組硬拼而不是 JSON 或?qū)ο罅骱芏嗳藙偵鲜謺r(shí)第一反應(yīng)是我需要一個(gè) DHCP 報(bào)文類(lèi)把 op、htype、xid 這些字段用 Java 對(duì)象表示然后序列化。這個(gè)方向沒(méi)錯(cuò)但注意 DHCP 報(bào)文在網(wǎng)絡(luò)上傳輸時(shí)就是純字節(jié)流而且它沒(méi)有現(xiàn)成的 Java 序列化協(xié)議必須按 RFC 2131 規(guī)定的固定偏移量逐字節(jié)塞進(jìn)去。報(bào)文頭固定部分只有 236 字節(jié)從 op 字段到 sname 的 64 字節(jié)加上 file 的 128 字節(jié)后面接著的是 64 字節(jié)的 options 區(qū)。這里的第一個(gè)坑是你用的 ByteBuffer 是 Big-Endian 字節(jié)序而 DHCP 報(bào)文里絕大多數(shù)多字節(jié)字段比如 yiaddr、ciaddr都是網(wǎng)絡(luò)字節(jié)序也就是 Big-Endian。這意味著直接調(diào)用ByteBuffer.wrap()然后putInt()是安全的但如果你為了取某個(gè)字段用getInt()時(shí)忘記考慮緩沖區(qū)位置就會(huì)讀到錯(cuò)位的數(shù)據(jù)。常見(jiàn)的實(shí)現(xiàn)方式是寫(xiě)一個(gè)專(zhuān)門(mén)的 DHCPPacket 類(lèi)內(nèi)部持有byte[] packet對(duì)外提供getOp()、setOp()之類(lèi)的訪問(wèn)方法。這樣在解碼時(shí)不需要反復(fù) copy 字節(jié)直接對(duì)底層數(shù)組按偏移量操作。我一般還會(huì)內(nèi)置一個(gè)parseOptions()方法把 options 區(qū)從 240 字節(jié)偏移開(kāi)始循環(huán)讀取先讀 option code1 字節(jié)如果是 0 是 padding如果是 255 是 end否則讀長(zhǎng)度再讀值。這個(gè)循環(huán)邏輯是整個(gè)解析器最容易出錯(cuò)的地方原因在于你必須在讀 code 前判斷剩余長(zhǎng)度是否至少為 2code len否則直接拋異常。2.2 報(bào)文類(lèi)型選項(xiàng)53 號(hào)選項(xiàng)和事務(wù) ID區(qū)分 Discover / Offer / Request 的分水嶺如果你只是在網(wǎng)絡(luò)上抓包看源端口 68 和 67 就能猜出大概。但代碼要處理的是具體邏輯分支Discover類(lèi)型 1、Offer類(lèi)型 2、Request類(lèi)型 3、Ack類(lèi)型 5、Nak類(lèi)型 6這些行為全靠 options 區(qū)里的第 53 號(hào)選項(xiàng)區(qū)分。byte類(lèi)型取值有符號(hào)的問(wèn)題在這里就暴露了。Java 里的byte是 -128 到 127而 DHCP 報(bào)文里某個(gè) code 可能是 0x80 甚至 0xFF。如果你寫(xiě)int code buffer[index]你會(huì)得到一個(gè)負(fù)數(shù)比如 0xFF 變成 -1。正確做法是int code buffer[index] 0xFF。這一點(diǎn)不著重說(shuō)明后面的報(bào)文解析一定會(huì)翻車(chē)。事務(wù) ID 是 xid 字段4 字節(jié)由客戶(hù)端隨機(jī)生成。服務(wù)器在回復(fù)時(shí)原樣帶回 xid客戶(hù)端用它匹配請(qǐng)求和響應(yīng)。在 Java 里你用SecureRandom.nextLong()然后截取低 32 位就可以。注意不要用Math.random()去生成因?yàn)樗诟卟l(fā)或多次快速重啟時(shí)可能重復(fù)導(dǎo)致客戶(hù)端把舊 Offer 當(dāng)成新 Offer。2.3 租約時(shí)間、子網(wǎng)掩碼、網(wǎng)關(guān)和 DNS選項(xiàng)的讀寫(xiě)順序決定兼容性拿到選項(xiàng)值之后你要按標(biāo)準(zhǔn)順序把它們編碼回去。常見(jiàn)的順序是53報(bào)文類(lèi)型、 server identifier54、 lease time51、 subnet mask1、 router3、 dns6。有些舊客戶(hù)端對(duì)選項(xiàng)順序敏感比如 Windows 老版本 DHCP 客戶(hù)端必須把 53 號(hào)選項(xiàng)放在最前面否則直接丟棄報(bào)文。選項(xiàng)值里額外要留意的是 IP 地址數(shù)組的對(duì)齊router 選項(xiàng)3和 DNS 選項(xiàng)6都是可以包含多個(gè) IP 的列表以 4 字節(jié)為間隔。讀取時(shí)要循環(huán)讀滿(mǎn)length才算完不能只讀第一個(gè)。寫(xiě)入時(shí)同樣按 4 字節(jié)一組。租約時(shí)間51 號(hào)是 4 字節(jié)整數(shù)單位是秒不能錯(cuò)成毫秒否則客戶(hù)端會(huì)在幾小時(shí)內(nèi)以為租約到期瘋狂續(xù)租。提示寫(xiě)一個(gè)獨(dú)立的DhcpOption類(lèi)字段包括 code、length、byte[] data。解析時(shí)先把 options 全部拆成若干 DhcpOption 對(duì)象再按 code 去查而不是在讀循環(huán)里當(dāng)場(chǎng)做分支處理。這樣的設(shè)計(jì)避免后續(xù)新增選項(xiàng)時(shí)改一大段解析代碼。3. 從零寫(xiě)最小 DHCP 服務(wù)器UDP 廣播收發(fā)與租約管理的完整 Java 代碼3.1 綁定 67 端口監(jiān)聽(tīng)廣播Socket 選項(xiàng)和網(wǎng)絡(luò)接口選擇DHCP 服務(wù)器監(jiān)聽(tīng) UDP 67 端口客戶(hù)端從 68 端口發(fā)送。在 Java 里這不是普通的DatagramSocket因?yàn)槟阆M盏桨l(fā)往 255.255.255.255 的廣播包。先看最精簡(jiǎn)的監(jiān)聽(tīng)代碼import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class DhcpServerSocket { private DatagramSocket socket; private InetAddress broadcastAddress; public DhcpServerSocket(int port, String broadcastIp) throws SocketException { // 廣播地址由網(wǎng)卡配置決定通常取 255.255.255.255 或子網(wǎng)定向廣播 this.broadcastAddress InetAddress.getByName(broadcastIp); // 第一個(gè)參數(shù)為端口第二個(gè)參數(shù)為綁定的本地地址null 表示所有地址 this.socket new DatagramSocket(port, null); // 允許廣播這步不做會(huì)收不到 255.255.255.255 的報(bào)文 socket.setBroadcast(true); // 加大接收緩沖區(qū)防止瞬間大量 Discover 導(dǎo)致丟包 socket.setReceiveBufferSize(64 * 1024); } public DatagramPacket receive() throws Exception { byte[] buf new byte[1500]; DatagramPacket packet new DatagramPacket(buf, buf.length); socket.receive(packet); return packet; } public void send(byte[] data, int length, InetAddress destIp, int destPort) throws Exception { DatagramPacket reply new DatagramPacket(data, length, destIp, destPort); // 目標(biāo)端口固定為 68客戶(hù)端監(jiān)聽(tīng)端口 socket.send(reply); } }參數(shù)說(shuō)明new DatagramSocket(port, null)中的 null 代表綁定到所有網(wǎng)卡。如果你的機(jī)器有多塊網(wǎng)卡只希望在特定網(wǎng)卡上服務(wù)這里可以傳InetAddress.getByName(192.168.1.100)。setBroadcast(true)是為了能夠向廣播地址發(fā)送回復(fù)包不設(shè)置就只能單播。監(jiān)聽(tīng)端口時(shí)如果提示Address already in use在 Linux 上可以用setsockopt的 SO_REUSEADDR 解決但 Java 里沒(méi)有直接暴露這個(gè)選項(xiàng)最簡(jiǎn)單的辦法是確認(rèn)沒(méi)有其他 DHCP 服務(wù)占著 67 端口。3.2 解析 Discover 報(bào)文并組裝 Offer一個(gè)完整的請(qǐng)求處理鏈路收到 Discover 后你要做的是讀取客戶(hù)端 MACchaddr 字段從偏移 28 開(kāi)始16 字節(jié)根據(jù) MAC 查租約表分配一個(gè)空閑地址然后組裝 Offer 報(bào)文。下面這段代碼集中展示了核心處理流程public class DhcpRequestHandler { // 租約表MAC - IP 和過(guò)期時(shí)間 private final MapString, Lease leaseMap new ConcurrentHashMap(); // 可用 IP 池用隊(duì)列模擬分配 private final QueueString addressPool; public DhcpRequestHandler(ListString poolAddresses) { addressPool new LinkedList(poolAddresses); // 啟動(dòng)一個(gè)定時(shí)線(xiàn)程定期清理過(guò)期租約 Executors.newSingleThreadScheduledExecutor() .scheduleAtFixedRate(this::cleanupExpiredLeases, 60, 60, TimeUnit.SECONDS); } public byte[] handleDiscover(byte[] requestPacket) { // 1. 解析客戶(hù)端 MAC包偏移 28 處長(zhǎng)度 6但 chaddr 字段是 16 字節(jié) byte[] chaddr Arrays.copyOfRange(requestPacket, 28, 44); String macKey toMacString(chaddr); String offeredIp leaseMap.containsKey(macKey) ? leaseMap.get(macKey).ipAddress : allocateIp(macKey); if (offeredIp null) { return null; // 地址池耗盡 } // 2. 構(gòu)造 Offer 報(bào)文的基礎(chǔ)字段 byte[] response new byte[240]; // 只占固定頭選項(xiàng)在后面追加 response[0] (byte) 0x02; // op: BOOTREPLY response[1] (byte) 0x01; // htype: Ethernet response[2] (byte) 0x06; // hlen: MAC 地址長(zhǎng)度 // 復(fù)制 xid客戶(hù)端用這個(gè)字段匹配 Offer System.arraycopy(requestPacket, 4, response, 4, 4); // yiaddr 字段從偏移 16 開(kāi)始填入分配的 IP byte[] ipBytes ipToBytes(offeredIp); System.arraycopy(ipBytes, 0, response, 16, 4); // 復(fù)制客戶(hù)端 MAC 到 chaddr System.arraycopy(chaddr, 0, response, 28, 6); // 3. 追加 options53 號(hào)報(bào)文類(lèi)型 Offer、54server id、1掩碼、51租約 ByteBuffer options ByteBuffer.allocate(256); options.put((byte) 53).put((byte) 1).put((byte) 2); // Offer 類(lèi)型 options.put((byte) 54).put((byte) 4) .put(ipToBytes(192.168.1.1)); // 服務(wù)器自身 IP options.put((byte) 1).put((byte) 4) .put(ipToBytes(255.255.255.0)); options.put((byte) 51).put((byte) 4) .putInt(7200); // 租約 2 小時(shí) options.put((byte) 255); // End 選項(xiàng) byte[] responseWithOptions new byte[240 options.position()]; System.arraycopy(response, 0, responseWithOptions, 0, 240); System.arraycopy(options.array(), 0, responseWithOptions, 240, options.position()); return responseWithOptions; } private String allocateIp(String mac) { // 簡(jiǎn)化實(shí)現(xiàn)從隊(duì)列取地址不考慮釋放問(wèn)題 String ip addressPool.poll(); if (ip ! null) { leaseMap.put(mac, new Lease(ip, System.currentTimeMillis() 7200_000L)); } return ip; } }邏輯說(shuō)明handleDiscover的輸入是整個(gè) UDP 報(bào)文的有效載荷字節(jié)數(shù)組。第一步解析 chaddr 時(shí)注意只取前 6 字節(jié)做 MAC因?yàn)?Ethernet 的 hlen 是 6但報(bào)文里該字段長(zhǎng)度是 16 字節(jié)剩余部分為零填充。response[0] 0x02表示這是 BOOTREPLY而請(qǐng)求包對(duì)應(yīng)值是 0x01BOOTREQUEST。xid 必須從請(qǐng)求包偏移 4 的位置復(fù)制 4 字節(jié)否則響應(yīng)對(duì)不上客戶(hù)端。Options 的組裝用了ByteBuffer且每個(gè) option 的格式是 code length value。長(zhǎng)度字段必須是實(shí)際字節(jié)數(shù)比如 51 號(hào) option 的租約時(shí)間是 4所以先put((byte) 4)再putInt(7200)。positon()返回當(dāng)前寫(xiě)入位置作為 options 區(qū)總長(zhǎng)度。這種寫(xiě)法比逐字節(jié)往一個(gè)byte[]里塞要清晰調(diào)試時(shí)也方便中途打印。3.3 收到 Request 后回 Ack狀態(tài)機(jī)里的最后一步Offer 發(fā)出后客戶(hù)端會(huì)廣播一個(gè) Request類(lèi)型為 3。這時(shí)候服務(wù)器要做的是確認(rèn)該 Request 中的 requested IP50 號(hào)選項(xiàng)確實(shí)是本服務(wù)器分配的然后回復(fù) Ack。下面代碼展示如何處理 Requestpublic byte[] handleRequest(byte[] requestPacket) { // 1. 從 options 里找到 50 號(hào)選項(xiàng)取請(qǐng)求的 IP ByteBuffer options ByteBuffer.wrap(requestPacket, 240, requestPacket.length - 240); String requestedIp null; String serverIdentifier null; while (options.remaining() 0) { int code options.get() 0xFF; if (code 0) { continue; // padding } if (code 255) { break; } int len options.get() 0xFF; byte[] val new byte[len]; options.get(val); if (code 50) { requestedIp bytesToIp(val); // 客戶(hù)端請(qǐng)求的地址 } else if (code 54) { serverIdentifier bytesToIp(val); // 客戶(hù)端期望的服務(wù)器地址 } } // 2. 判斷是否應(yīng)該由本服務(wù)器響應(yīng)客戶(hù)端指定了其他 server id 則忽略 if (serverIdentifier ! null !serverIdentifier.equals(localServerIp)) { return null; } // 3. 校驗(yàn)地址池里確實(shí)有這個(gè)地址且未分配給別人 if (!addressPool.contains(requestedIp) !isLeasedToClient(requestedIp)) { return null; } // 4. 組裝 Ack報(bào)文類(lèi)型 5返回分配結(jié)果 byte[] ack buildReply(requestPacket, (byte) 5, requestedIp); return ack; }邏輯說(shuō)明handleRequest里的循環(huán)解析 options特別要注意options.get()返回的是有符號(hào)字節(jié)這里用 0xFF規(guī)避負(fù)數(shù)問(wèn)題。當(dāng)客戶(hù)端拿到 Offer 后會(huì)發(fā) Request并把 50 號(hào)選項(xiàng)設(shè)成自己想要的 IP。如果網(wǎng)絡(luò)里有多個(gè) DHCP 服務(wù)器同時(shí)收到了 Request客戶(hù)端會(huì)用 54 號(hào)選項(xiàng)指定它認(rèn)可的服務(wù)器其他服務(wù)器看到 54 號(hào)不是自己就直接忽略。這一步邏輯不寫(xiě)就會(huì)出現(xiàn)兩臺(tái)服務(wù)器同時(shí)回 Ack 的沖突場(chǎng)景。3.4 定時(shí)清理租約ConcurrentHashMap 怎么和地址池配合實(shí)際運(yùn)行中客戶(hù)端釋放地址時(shí)的 Release 報(bào)文是單播發(fā)給服務(wù)器的所以handleRequest方法里還需要處理報(bào)文類(lèi)型 7Release。Release 報(bào)文里含客戶(hù)端 IPciaddr 字段服務(wù)器拿到后把地址放回池子、從租約表刪除。但客戶(hù)端可能異常斷電永遠(yuǎn)不發(fā) Release所以必須依賴(lài)租約過(guò)期機(jī)制。private void cleanupExpiredLeases() { long now System.currentTimeMillis(); for (Map.EntryString, Lease entry : leaseMap.entrySet()) { if (entry.getValue().expireTime now) { // 地址回收放回隊(duì)列尾部允許被重新分配 addressPool.offer(entry.getValue().ipAddress); leaseMap.remove(entry.getKey()); } } }這里的隱患是地址池用ConcurrentHashMap和LinkedList組合本身就不是線(xiàn)程安全的。cleanupExpiredLeases在獨(dú)立線(xiàn)程里跑而handleDiscover在主接收線(xiàn)程里也會(huì)操作addressPool。解決方式是給地址池操作加鎖或者直接用BlockingQueue并用ConcurrentHashMap記錄租約和到期時(shí)間。我在實(shí)際項(xiàng)目里會(huì)用ConcurrentHashMap存mac - ip的映射再用ConcurrentHashMapString, Long存ip - expireTime清理時(shí)同時(shí)刪兩個(gè) map分配時(shí)用AtomicInteger做輪詢(xún)游標(biāo)而不是直接 poll 隊(duì)列因?yàn)獒尫藕瓦^(guò)期回收都會(huì)動(dòng)態(tài)往隊(duì)列里放地址。private final AtomicInteger cursor new AtomicInteger(0); private final ListString allIps; // 固定列表初始化時(shí)排序好 private String allocateIp(String mac) { for (int i 0; i allIps.size(); i) { int idx Math.abs(cursor.getAndIncrement() % allIps.size()); String candidate allIps.get(idx); if (!leaseMap.containsKey(mac) !leasedIpSet.contains(candidate)) { leaseMap.put(mac, new Lease(candidate, System.currentTimeMillis() 7200_000L)); leasedIpSet.add(candidate); return candidate; } } return null; }參數(shù)說(shuō)明allIps在初始化時(shí)從配置的網(wǎng)段展開(kāi)比如192.168.1.100到192.168.1.200生成 101 個(gè)地址。cursor每次分配時(shí)累加再取模實(shí)現(xiàn)輪詢(xún)分配避免每次都從列表頭部開(kāi)始找導(dǎo)致早期地址快被用光、后續(xù)地址閑置。leasedIpSet是一個(gè)SetString用來(lái)快速判斷地址是否已被占用否則每次都要遍歷租約表。4. 客戶(hù)端實(shí)現(xiàn)與抓包驗(yàn)證三步確認(rèn)你的 DHCP 協(xié)議棧沒(méi)寫(xiě)歪4.1 構(gòu)造 Discover 報(bào)文的細(xì)節(jié)68 端口和全零地址客戶(hù)端代碼比服務(wù)器少很多核心是構(gòu)造 Discover 并發(fā)送到 255.255.255.255:67。關(guān)鍵約束是源端口必須是 68源 IP 可以是 0.0.0.0因?yàn)榭蛻?hù)端此時(shí)還沒(méi)有 IP。public class DhcpClient { private DatagramSocket socket; public void startDiscovery() throws Exception { socket new DatagramSocket(68, InetAddress.getByName(0.0.0.0)); socket.setBroadcast(true); socket.setSoTimeout(5000); // 5 秒收不到就超時(shí) byte[] discover buildDiscoverPacket(); DatagramPacket pkt new DatagramPacket(discover, discover.length, InetAddress.getByName(255.255.255.255), 67); socket.send(pkt); // 等待 Offer,讀到報(bào)文后校驗(yàn) xid 與自己的匹配 byte[] buf new byte[1500]; DatagramPacket response new DatagramPacket(buf, buf.length); socket.receive(response); parseOffer(buf); } private byte[] buildDiscoverPacket() { byte[] packet new byte[240 4]; packet[0] (byte) 0x01; // BOOTREQUEST packet[1] (byte) 0x01; packet[2] (byte) 0x06; // xid: 4 字節(jié)隨機(jī)數(shù) int xid new SecureRandom().nextInt(); packet[4] (byte) (xid 24); packet[5] (byte) (xid 16); packet[6] (byte) (xid 8); packet[7] (byte) xid; // 自己的 MAC假設(shè)網(wǎng)卡 MAC 是 01:02:03:04:05:06 byte[] mac new byte[]{(byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04, (byte) 0x05, (byte) 0x06}; System.arraycopy(mac, 0, packet, 28, 6); // options53 號(hào)選項(xiàng) Discover1 packet[240] (byte) 53; packet[241] (byte) 1; packet[242] (byte) 1; packet[243] (byte) 255; // End return packet; } }邏輯說(shuō)明new DatagramSocket(68, 0.0.0.0)綁定到 68 端口這樣收到的 Offer 會(huì)被操作系統(tǒng)路由到該 socket。xid 的生成用SecureRandom.nextInt()而不是Math.random()是為了避免在多線(xiàn)程場(chǎng)景下的重復(fù)性。注意把 xid 拆成 4 個(gè)字節(jié)的順序——Java 的 byte 是有符號(hào)的xid 24的結(jié)果 0~255賦值給 byte 時(shí) 0xFF 會(huì)變成 -1但在傳輸中字節(jié)序列是正確的因?yàn)槎M(jìn)制表達(dá)沒(méi)變。實(shí)際解析時(shí)用 0xFF再拼回 int 即可。4.2 收到 Offer 后如何提取租約信息ip 和 options 的解析順序在parseOffer中要依次做檢查 op 字段是否為 2、xid 是否匹配、拿到 yiaddr偏移 16 起的 4 字節(jié)、掃描 options 找 51 號(hào)租約時(shí)間和 54 號(hào)服務(wù)器標(biāo)識(shí)。解析順序別看反了很多人先處理 options 后取 IP就會(huì)發(fā)現(xiàn) options 區(qū)的偏移計(jì)算有誤。private void parseOffer(byte[] response) { if (response[0] ! (byte) 0x02) { throw new IllegalStateException(不是 BOOTREPLY); } // 檢查 xid 是否匹配這里略去與發(fā)送時(shí)保存的 xid 比較 byte[] yiaddr Arrays.copyOfRange(response, 16, 20); String assignedIp InetAddress.getByAddress(yiaddr).getHostAddress(); // 掃描 options int offset 240; while (offset response.length) { int code response[offset] 0xFF; if (code 0) { offset; continue; } if (code 255) break; int len response[offset 1] 0xFF; byte[] value Arrays.copyOfRange(response, offset 2, offset 2 len); if (code 1) { // 子網(wǎng)掩碼 String mask bytesToIp(value); // 后續(xù)計(jì)算可用地址范圍會(huì)用到 } else if (code 3) { // 網(wǎng)關(guān)列表一個(gè)選項(xiàng)可能包含多個(gè) IP for (int i 0; i value.length; i 4) { String gateway bytesToIp(Arrays.copyOfRange(value, i, i 4)); } } else if (code 51) { long leaseTimeSec ((long) (value[0] 0xFF) 24) | ((value[1] 0xFF) 16) | ((value[2] 0xFF) 8) | (value[3] 0xFF); // leaseTimeSec 單位是秒 } offset 2 len; } }參數(shù)說(shuō)明租約時(shí)間如果直接用ByteBuffer.wrap(value).getInt()也可以但要注意getInt()會(huì)得到有符號(hào) int最長(zhǎng)租約 0xFFFFFFFF 會(huì)變成 -1。這里我演示了手工拼接的方式結(jié)果用 long 承接。網(wǎng)關(guān)選項(xiàng)按 4 字節(jié)一組遍歷時(shí)要小心 len 不是 4 的倍數(shù)這種畸形包用value.length / 4作為循環(huán)次數(shù)更穩(wěn)妥。4.3 用 Wireshark 對(duì)照驗(yàn)證你寫(xiě)的源碼和標(biāo)準(zhǔn)報(bào)文差在哪代碼寫(xiě)完后別急著部署先在本地起服務(wù)器再起客戶(hù)端用 Wireshark 抓bootp或dhcp過(guò)濾。如果要驗(yàn)證 Java 客戶(hù)端發(fā)的 Discover 是否規(guī)范抓包后看這幾個(gè)點(diǎn)檢查項(xiàng)正確值/行為常見(jiàn)錯(cuò)誤源端口68錯(cuò)寫(xiě)成 67 或隨機(jī)端口目標(biāo)端口67錯(cuò)寫(xiě)成 68op 字段1請(qǐng)求/ 2響應(yīng)兩個(gè)方向搞反xid 一致性請(qǐng)求與響應(yīng)相同響應(yīng)時(shí)復(fù)制偏移搞成 8 或 12options 的 End 標(biāo)記必須有 255 結(jié)尾漏掉后服務(wù)端解析會(huì)越界chaddr 填充前 6 字節(jié) MAC后 10 字節(jié)補(bǔ) 0直接 copy 16 字節(jié)導(dǎo)致把雜數(shù)據(jù)帶進(jìn)去我習(xí)慣在寫(xiě)代碼時(shí)加一段 debug 日志每次收到 / 發(fā)出的報(bào)文用 HexFormat 或DatatypeConverter.printHexBinary()把前 40 字節(jié)打出來(lái)。這樣不依賴(lài) Wireshark 也能在控制臺(tái)里對(duì)著報(bào)文字段偏移人工校驗(yàn)。提示如果你在 Windows 上跑 Java 服務(wù)端收到的廣播包源地址可能是 0.0.0.0而目標(biāo)地址是 255.255.255.255。如果綁定 67 端口時(shí)報(bào)SocketException: Permission denied是因?yàn)榉枪芾韱T進(jìn)程無(wú)權(quán)綁定 1024 以下端口。開(kāi)發(fā)時(shí)用 6767 端口調(diào)試需要聯(lián)調(diào)時(shí)再以管理員權(quán)限啟動(dòng)。5. Java 實(shí)現(xiàn) DHCP 的 5 個(gè)高頻踩坑點(diǎn)與對(duì)應(yīng)排查手段5.1 報(bào)文里大于 127 的字節(jié)變成負(fù)數(shù)解析全盤(pán)錯(cuò)亂現(xiàn)象客戶(hù)端發(fā)來(lái)的 Discover 包服務(wù)器讀到選項(xiàng) code 是負(fù)數(shù)比如 -128實(shí)際是 0x80然后直接數(shù)組越界或走錯(cuò)分支。原因Java byte 是有符號(hào)類(lèi)型0x80 到 0xFF 會(huì)被解釋為 -128 到 -1。你在int code buffer[offset]時(shí)沒(méi)做掩碼處理。解決所有從報(bào)文里讀單字節(jié)并轉(zhuǎn)成「無(wú)符號(hào)整數(shù)」的地方統(tǒng)一寫(xiě)成buffer[offset] 0xFF。不要覺(jué)得這行代碼多余特別是在 options 循環(huán)、長(zhǎng)度字段和 IP 地址首字節(jié)處。另外在把 int 寫(xiě)成 byte 時(shí)比如packet[240] (byte) 53如果 int 值超過(guò) 127必須強(qiáng)轉(zhuǎn)否則編譯不通過(guò)。寫(xiě)一個(gè)toUnsignedByte(int)工具方法可以減少重復(fù)出錯(cuò)。5.2 廣播包收不到setBroadcast(true) 漏了或者網(wǎng)卡綁定錯(cuò)了現(xiàn)象服務(wù)器啟動(dòng)后沒(méi)有任何日志客戶(hù)端一直顯示發(fā)送成功但等不到 Offer。用 Wireshark 看服務(wù)器所在機(jī)器發(fā)現(xiàn)根本沒(méi)有收到包。原因有兩類(lèi)。第一類(lèi)是 Java 的DatagramSocket默認(rèn)不接收廣播地址的包必須顯式socket.setBroadcast(true)。第二類(lèi)是服務(wù)器綁定的 IP 和客戶(hù)端廣播到達(dá)的網(wǎng)卡不是同一個(gè)。如果機(jī)器有 eth0 和 eth1客戶(hù)端廣播從 eth1 進(jìn)來(lái)但你綁定的是 eth0 的 IP內(nèi)核同樣會(huì)丟包。排查方法先臨時(shí)寫(xiě)一段代碼打印本機(jī)所有網(wǎng)卡地址然后把new DatagramSocket(port, null)改成new DatagramSocket(port, InetAddress.getByName(0.0.0.0))保證綁定到所有接口。如果還不行用tcpdump -i any port 67在 Linux 上確認(rèn)報(bào)文是否到達(dá)內(nèi)核。5.3 Options 解析越界漏了 padding 和 End 選項(xiàng)的處理現(xiàn)象服務(wù)器解析某些客戶(hù)端比如老舊設(shè)備發(fā)來(lái)的請(qǐng)求時(shí)代碼直接拋ArrayIndexOutOfBoundsException或讀到一個(gè)巨大的 len 值。原因DHCP 報(bào)文 options 區(qū)不是每次都恰好填滿(mǎn) 64 字節(jié)。RFC 2131 規(guī)定 options 區(qū)末尾以 255 結(jié)束但在它之前可能有一串值為 0 的 padding 選項(xiàng)。你的循環(huán)如果只看了 255 沒(méi)看 0或者認(rèn)為 len 字段一定是合理的遇到 0 時(shí)把 padding 當(dāng)普通選項(xiàng)的 code 和 len 去讀就會(huì)讀到錯(cuò)亂的字節(jié)。解決循環(huán)里的處理順序必須是讀 code如果 code 0跳過(guò)當(dāng)前字節(jié)繼續(xù)下一個(gè)如果 code 255立即結(jié)束否則再讀 len 并跳過(guò) len 字節(jié)。注意不能把 padding 當(dāng) code 為 0 的選項(xiàng)因?yàn)?padding 沒(méi)有 len 字段。另外解析時(shí)要用offset 2 len packet.length做邊界保護(hù)一旦條件不滿(mǎn)足直接丟棄該包并記日志。5.4 客戶(hù)端對(duì) Ack 不買(mǎi)賬Server Identifier 選項(xiàng)寫(xiě)錯(cuò)地址現(xiàn)象服務(wù)器日志顯示已發(fā)出 AckWireshark 也看到了但客戶(hù)端就是報(bào)錯(cuò)或者客戶(hù)端狀態(tài)停在 Request 階段不進(jìn)入 Bound。原因Ack 里必須包含 54 號(hào)選項(xiàng)Server Identifier且該值必須是服務(wù)器自身的 IP 地址。如果寫(xiě)成 255.255.255.255 或者 0.0.0.0客戶(hù)端按 RFC 就認(rèn)為這個(gè) Ack 不合法。還有一種情況是服務(wù)器有多個(gè) IP寫(xiě)成了其中某個(gè)不是客戶(hù)端網(wǎng)關(guān)所在網(wǎng)段的地址客戶(hù)端可能無(wú)法路由這個(gè)單播 Ack。解決在組裝 Ack 時(shí)用DatagramPacket的getLocalAddress()或提前從網(wǎng)卡讀到的地址確保54號(hào)選項(xiàng)的值與收包時(shí)客戶(hù)端發(fā)來(lái)的目標(biāo)地址段匹配。實(shí)在無(wú)法確定時(shí)用收到 Discover 報(bào)文的源地址所在子網(wǎng)推斷服務(wù)器該用哪個(gè)地址回復(fù)。5.5 租約過(guò)期后地址沒(méi)釋放cleanup 線(xiàn)程跑飛或者占用檢查漏了現(xiàn)象地址池明明只有 50 個(gè)地址跑了幾天后全部被占用新設(shè)備拿不到 IP。但檢查 DHCP 租約表很多租約早已過(guò)期。原因cleanupExpiredLeases方法里刪除 map 條目時(shí)沒(méi)有同步更新地址池。比如你把leaseMap.remove(entry.getKey())寫(xiě)了卻忘了把 IP 放回addressPool。還有可能是在移除租約時(shí)遍歷的是 entrySet但后面又有新請(qǐng)求往同一個(gè) key 寫(xiě)入導(dǎo)致 remove 和 put 競(jìng)爭(zhēng)。解決清理邏輯要和分配邏輯用同一個(gè)鎖。我習(xí)慣做法是把租約表和地址池封裝成一個(gè)LeaseManager類(lèi)所有方法加synchronized或者直接用ReentrantLock。清理時(shí)先標(biāo)記 IP 釋放再刪租約順序不能反否則中間態(tài)有分配線(xiàn)程可能拿到這個(gè) IP 又被后續(xù)刪除動(dòng)作誤傷。提示這些坑里前三個(gè)是 Java 獨(dú)有的后兩個(gè)是 DHCP 協(xié)議實(shí)現(xiàn)共有的。如果你在做自己的項(xiàng)目建議每解決一個(gè)坑就補(bǔ)一條單測(cè)比如構(gòu)造一個(gè)含 padding 的畸形報(bào)文驗(yàn)證解析器是否崩潰覆蓋這些場(chǎng)景后改代碼會(huì)安心很多。6. 讓實(shí)現(xiàn)可以上生產(chǎn)報(bào)文一致性校驗(yàn)與性能壓測(cè)的小工具我的習(xí)慣是給 DHCP 服務(wù)器代碼加一個(gè)獨(dú)立的「報(bào)文自檢」入口用真實(shí)的客戶(hù)端抓包文件回放而不是每次手動(dòng)敲命令。流程是先用 Wireshark 把真實(shí)環(huán)境的 Discover 和 Request 報(bào)文導(dǎo)出為二進(jìn)制文件然后用 Java 程序讀取每個(gè)包并調(diào)用你自己的解析邏輯最后把輸出的 Offer/Ack 再與 Wireshark 里抓到的真實(shí)響應(yīng)逐字節(jié)對(duì)比。核心校驗(yàn)代碼可以寫(xiě)成一個(gè)獨(dú)立方法public boolean validatePacket(byte[] packet, int maxLength) { if (packet.length 240 || packet.length maxLength) { return false; } // op 只能是 1 或 2 if ((packet[0] 0xFF) ! 1 (packet[0] 0xFF) ! 2) { return false; } // htype 為 1 時(shí) hlen 必須是 6 if (packet[1] 1 (packet[2] 0xFF) ! 6) { return false; } // 掃描 options驗(yàn)證每個(gè) option 都不越界 int offset 240; while (offset packet.length) { int code packet[offset] 0xFF; if (code 0) { offset; continue; } if (code 255) break; if (offset 1 packet.length) return false; int len packet[offset 1] 0xFF; if (offset 2 len packet.length) return false; offset 2 len; } return true; }運(yùn)行單測(cè)時(shí)我把抓到的包分兩類(lèi)合法報(bào)文和畸形報(bào)文。合法報(bào)文必須通過(guò)校驗(yàn)畸形報(bào)文必須被拒絕。這個(gè)校驗(yàn)器本質(zhì)上就是你的防御性編程的集中體現(xiàn)值很值得維護(hù)。有了能跑通的核心邏輯和校驗(yàn)器下一步建議做一次壓力測(cè)試。用循環(huán)線(xiàn)程模擬 500 個(gè)客戶(hù)端同時(shí)啟動(dòng)ExecutorService pool Executors.newFixedThreadPool(50); CountDownLatch startSignal new CountDownLatch(1); for (int i 0; i 500; i) { final int clientId i; pool.submit(() - { try { startSignal.await(); DhcpClient client new DhcpClient(); client.setMac(randomMac(clientId)); client.startDiscovery(); } catch (Exception e) { System.err.println(client clientId failed: e.getMessage()); } }); } startSignal.countDown(); pool.shutdown();注意這里每個(gè)線(xiàn)程都創(chuàng)建獨(dú)立DatagramSocket綁定 68 端口這本身就會(huì)遇到端口沖突——多個(gè)進(jìn)程不能同時(shí)綁同一個(gè)端口。所以在壓測(cè)時(shí)要讓客戶(hù)端隨機(jī)使用 68 到 70 范圍內(nèi)的端口或者用同一個(gè) socket 串行發(fā)。更實(shí)際的做法是直接用服務(wù)端日志里的xid去重統(tǒng)計(jì)單位時(shí)間收到多少個(gè)不同 xid 的 Discover再用單線(xiàn)程代碼往服務(wù)器灌大量手工構(gòu)造的 Discover 報(bào)文來(lái)測(cè)試吞吐。最后一個(gè)技巧把核心的報(bào)文組裝和解析邏輯與網(wǎng)絡(luò)收發(fā)解耦。網(wǎng)絡(luò)層可以換 Netty 的 DatagramChannel 或者 OIO 實(shí)現(xiàn)但解析和組裝是純函數(shù)式的輸入 byte[] 輸出 byte[]。這樣將來(lái)想把服務(wù)跑在 Vert.x 上或者遷移到 GraalVM 原生鏡像都不需要?jiǎng)訁f(xié)議代碼。我的個(gè)人習(xí)慣是任何時(shí)候都會(huì)以 Wireshark 抓包為最終真理寫(xiě)完代碼先抓包對(duì)比 20 個(gè)請(qǐng)求再談可靠性。DHCP 看起來(lái)簡(jiǎn)單但報(bào)文里的每個(gè)字節(jié)都有自己的脾氣希望這套實(shí)現(xiàn)思路能幫你少走幾個(gè)彎路。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
高清无码学生妹高潮| 精彩视频日韩| 97人人夜| 操逼网站视频漫画国产| 亚洲天天精品| 丝袜美腿欧美| 尤物视频一区| 久草这里只有精品 | 亚洲成人一区二区精品| 久久久久久久久一区二区三区| 日韩人妻精品久久久久| 欧美一级久久久丰满| 亚洲熟女乱色一区二区三区久久久| 秋霞影音一区二区三区| av最新免费中文字幕| 另类小说欧美激情校园春色| 久久久禁| 欧中日成人免费影视| 人、人、摸,人、人、草| 一区二区三| 中文字幕免费看| 日韩丝袜人妻AV| 自慰白浆在线观看| 亚洲AV无码黄色强奸| 中文字幕三四区| 中文无线日韩一区| 日日骚av| 97se亚洲| 性欧美999| 国产理论视频在线播放| 人妻人人澡人人爽人人| 丝袜狂射91| 福利在线观看一区二区| 内射小黄片| av久日| 男人下部插入女人下部| 国产精品一区二区三区在线密挑| 亚洲人人操| 亚一综合久久久久久久久久| 国产精品久久久久久高清无码免费看| w w w.久久精品| 少妇高潮九九九九| 久久久夜夜夜| 97久久超碰日韩精品| 久久天堂网| 青青草玖玖爱| 九九超碰综合网| 亚欧洲一区二区视频| 色女综合| 性爱综合网| 韩日欧亚a级| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 69丨亚洲丨精品丨入口免费播放| 色婷婷aV一区二区三区麻豆综合| 日本超碰在线国产一区| 天天看综合网| 亚洲激情色片| 少妇熟女视频一区二区三区| 九九久精品| 久久九操在线观看| 午夜视频久久久| 97超碰欧美精品| 在线播放欧洲免费av| 国产风韵犹存熟妇三区| 97爱综合| 三级AV入口| 成人av在线播放| 亚洲色人阁| 99精品无码| 成人日本片久久久蜜桃| 国内一级精品| 亚洲天堂精品日韩电影| 亚洲九月丁香| 人人人人人人少妇| 在线97在线| 蜜桃视频一区二区三区| 啊啊在线| 国产女同在线观看视频| 一区二区三区 日韩欧美| 91一起操| 闷骚老熟女15P| 搞中出视频在线观看| 色踪合AV| 欧美一区二区男人天堂| 亚洲欧洲综合av在线| 国产三级日产三级韩国三级| 久久久久精| 天堂资源站| 快灬快灬 一下爽蜜桃在线观看| 97综合在线观看| 国产三级电影免费观看| 88xx成人精品视频| 激情天天视频| 岛园激情| 亚洲综合色在线| 精…码一二三区| 小日子操bb在线看| 国产亚洲人妻综合日韩 久久| 这里只有精品视频| 青青草啪啪网| 操逼视频国产无套| www.夜夜操| A啊啊在线观看| 欧美色青| 国产99 中文字幕日韩小视频| 97综合在线观看| 淫穴高潮色图| 18禁免费视频| 人妻在线臀日韩| 久久久精品,3| 亚洲情色中文字幕一区| 国产噜噜噜噜噜久久久久久久久| 精品日韩| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 91一起操| 日韩欧美~中文字| 91精品国产91综合久久蜜臀| 99ri在线视频| 快播久久人人aV| 婷婷丁香九月| 一二三区在线| 亚洲成人一区二区精品| 中文字幕久久精品一区| 成人五月天丁香激情综合| 国内毛片婷婷六月色| 国产白丝网站| 欧美十八禁在线看| 一本大道久| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 久久久91福利姬| 乱伦av.com| 乱伦AVxx| 丰满搜索结果 -第18页- 久久高清无码 | 色青青久久影视| 中文字幕女同在线| av中亚| 狠狠色婷婷7777久| 97操综合| 色婷婷五月天| 五十路熟女人妻一区二区三区四区五| 丝袜美腿欧美| 男女日B国产| 夜夜操夜夜爽夜夜高潮| 370p日韩欧美亚洲精品| 香蕉精品二区二区| 亚州伊人色综台| 亚洲色图91| 一起草av| 国产精品直播在线观看直播| 中美日韩毛片| 欧美日本中字另类在线| 91无码人妻精品一区二区三区蜜桃| 国产成人免费观看在线视频| 九九九九精品视频| 神马午夜久久久| 在线色导航| 人妻熟女一区二区| 97精品综合| 日韩性爱小视频| 欧美熟女激情| 岛国片国产成人亚洲播放| 亚洲精品97中文字幕| 精品一区二区人妖| 青青久久艹| 加勒比日本在线| 在线欧美69V免费观看视频| 土豪酒店各种姿势玩弄极品幼稚| 欧亚成人| 91n欧美| 激情文学欧美| 天天淫人人妻日日色| 69少妇一区二区| 97久久国产亚洲精品超碰热| 又黄又爽在线观看视频| 八戒无码国产午夜福利| 极品出轨视频网站| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 中出789在线视频| 亚洲色 国产 欧美 日韩| 国产AV线| 91爰爱欧美| 国产又操| 亚洲高清无码在线桃色| 日韩精品 欧美激情| 成人熟女区| 久操操| 激情 欧美 亚洲 小说| 久久人人爽av亚洲精品天堂桃色| 九九九九九九九九九九九免费国产| 国产亚洲深夜激情| 色综合一区二区三区| 欧美日韩中国x| 久操99| 国产树林里野战在线看| 无码WWW免费视频网站| 狠狠91| 激情婷婷黑人91| 青青草亚洲一区 | 亚洲日韩青青草色月| 女人被添高潮免费视频| 先锋色眉乱伦资源| 国产家庭乱伦性爱视频| 26UUU欧美激情一区二区| 一区二区影视| 97se亚洲综合自| 午夜AV污污污| 国产噜噜噜噜噜久久久久久久久| 五月天成人综合| 中文一区在线视频| 影音先锋少妇| 偷拍三区| 久久中文字幕一区不卡| 亚洲97综| dy888午夜老子影视达达兔| 99色热| 人妻超碰青青草98| 亚洲极品| 婷婷激情四射| 国产欧美精品日韩区二区麻豆天美| 欧美日韩黄片精品在线| 蜜臀操逼黄色视频操的好爽| 久久九七| 亚洲成人性爱网站在线播放| 亚洲男人天堂2016| 国产区性爱在线视频秋霞豆| 日本不卡免费二区| 久久五月婷| 国产精品自拍视频| 少妇内射www在线观看视频| 日韩中文字幕精品一区在线| 97网址97| 丰满人妻-区二区三区免费| 国产久久天堂资源| 极品少妇99| 国产一级作爱毛片| 亚洲人妻久久| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 97超碰超| 久久动漫精品视频这里只有精品| 超碰碰碰碰| 韩日色费| 九9精品| 26uuu欧美| 人妻中文字幕精品无码| 啊啊啊想要| 日韩精品操少妇| 性爱av在线免费观看| 操逼网站网站| 超碰99re| 欧美啪啪啪91| 人人爽夜夜玩视频| A男人的天堂| 美女裸体麻豆天美蜜桃91| 欧美国产日韩高清在线| 日韩字幕一区| 100啪啪视频大全| 1区2区3区视频| 麻豆av一区二区| 亚洲国产亚洲天堂| 精品9999| 97超级久久| 91欧美www| 蜜桃臀AV在线| 九九九精品美女| 欧美精品亚洲精品日韩传电影| 亚洲视频,小说| 国产精品网站www| 啊好爽受不了无码| 超碰97首页| 99国产精品自在自在| 日韩 女同 综合| 欧美一级专区免费大片 | 亚洲国产日韩欧美熟妇在线| 五月色综合| 91在线页| 欧美一二级| 啊啊啊啊好大好硬啊啊啊啊啊 | 啊啊啊好湿久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 久久色AV线| 久久9精品| 亚洲成人激情小说视频| 夜夜操青青草| 亚洲色鬼| 手机av亚洲丝袜美腿日韩第一页二页| 91 国产丝袜在线播放-百度| 婷婷久久久精品| 黄色激情电影在线观看| 嗯啊免费视频| 综合亚洲欧美| 五月综合婷婷久久网站| 国产天天骚| 蜜桃精品一区二区三区久在线| 久热这里只有精品9| 伊人精品久久网站| 自拍二页| 国产在线视频午夜精华在| 久草视频在线视频在线视频在线观看| 日日干日日| 大香交| 性爱乱伦视频免费| 啊啊啊在线观看免费视频| 亚洲在线91| 精品国产肉丝袜在线拍国语| 日韩国产十八禁| 78精品| 91丝袜美女国产| 日韩天天本| 日本操逼视频不卡直接放| 花野真衣| 亚洲黄色电影| 日美免费黄片| 欧美亚洲韩国视频十五区 | 啊啊啊啊啊啊啊啊要喷了| 黄片免费视频2019| 高树玛利亚无码流出| 男人的天堂com| 狠狠干狠狠色| 午夜无遮挡男女啪啪视频| 日本天堂网| 国产日逼视频| 在线天堂资源亚洲| 亚州成人a∨| 一本精品日本在线视频精品| 怡春院久久| Julia在线播放亚洲久久| 91 偷| 日本丝袜美腿人妻九九| 欧美色视频在线| 欧美图片校园春色| 夜夜高潮夜夜爽高清视频一| 久久一区二区高清免费| 国产免费内射视频| 日本啊啊啊啊啊视频| 91人妻最真实刺激绿帽| 久久久草草精品| 97天天搞在线| 亚洲福利中文字幕在线| 国产高清无码一区三区二区| 中文一区二区三区影院| 亚洲性综合11| 麻豆区99999| 超碰人妻在线| av在线一区二区三区| 亚洲国产成人精品女人久久久| 日韩美女高潮喷水视频| 一本久久精品中文字| 欧美成人一区二区三区在线播放| 又大又大又大又粗爽高潮观看 | 屁股久久久久久久久| 久久久久久中文字幕中文字幕最新| 欧美一区二区三区日韩| 黄色电影在线播放综合网站| 成人免费视瓶| 9久久久久| 欧美性五月| 国产精彩女在线观看视频| 亚洲精品天天影视综合网 | 国产午夜福利合集| 97精品视频在线播放| 亚州综合图片| 欧美色图片色哟哟| 小电影欧美91| 另类视频在线| 日韩资源网| 久久人妻办公室视频| 日韩性爱再线视频| 亚洲AV无码国产精品久久久久 | 日本Xx性爱| 鸥美插入视频| 激情综合五月| 久久久久久久九九九九九九| 后入福利视频| 色臀AV| 一类无码操逼视频| 99在线无码精品秘 入口黑人| 亚欧性爱无码| 日韩欧美字幕亚洲一区二区| 久久色情| 久久精品人妻一区二区| 97天天操| 亚洲AV无码AV吞精久久久久| 国产成人久久久精品免费AV| 天美av在线观看| 久艹伊人精品综合在线| 青青草成人视频在线观看二区| 超碰视97中文| 中文字幕丰满子伦无码专区在线视频最新| 国产97在线 | 亚洲| 色综合天天爱去电影网| 亚洲无码成人精品| 日本三级中国三级99人妇网站| 五月色综合| 2019AV天堂| 夜夜 中文视频rt| 美女啊啊啊啊啊啊| 国产精品自在自拍视频| 91暧暧| 日韩毛片9| 黄色工厂这里只有精品| 草草影院最新网址| 中文字幕日韩综合| 色与欲影视天天看综合网| 97欧美视频| www.婷婷六月天| 亚洲色资源| 26uuu最新| 另类一区| 日本在线999| 欧美黄片欧美黄片xxx| 中文字幕丝袜人妻| 97欧美超碰| 六月丁香五月婷婷| 人妻娇喘 激情视频| 欧美日韩狠狠爱| 人妻出轨一区二区三区| 免费观看国产不卡av| 99草精| 久艹伊人精品综合在线| 日本在线视频导航| 成年人黄色视频免费| 校园春色宗合网| 超碰调教97| 综合网色| 睡产熟女乱伦| 国产精品女生av| 久久久四区| 日日嗷| 97自拍一区| 日本天天吊| 成人网址在线观看| 国产黄片精品在线| 欧亚性爱在线视频| 69国产对白刺激| 日韩有码专区| 日韩成年人性爱视频| 久久午夜神马| 鸥美中出| 熟女熟妇伦久久影院毛片一区二区| 久久视网78| 九九九九免费高| 欧美色图在线视频少妇| 久久 精品| 黄色小视频日本txt| 男人的天堂亚洲| 区自美91| www亚洲免费| www.91色综合| 亚91网| 岛国视频免费在线观看| AV高清一区| 男人天堂2019| 婷婷五月av| 天天大干大香蕉| wwwxxx日本爽| 国产超碰在线一区| 97亚洲精品| 99热亚洲| 94色色电影网| 久久五月婷| 国模久久在线| 色啪网| 神马久久免费电影观看| 日韩探花精品在线视频| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 九九性视频| 射丝袜大香蕉| japan日本高清乱xxxx| 99www.bibizy香蕉资源国产一区二区三区高清| 91综合网站| 狠狠综合网| 亚洲欧美清纯| 色性荡荡荡荡视频| 最新日本中文字幕| 丰满人妻一区二区三区在线| 国产精品爆乳懂色蜜乳| 免费人人搞97| 久久男人精品| 蜜乳av一区二区三区四区不卡| 国产亚洲女v在线观看| 西西美女视频网| 在线A日本| 情色五月天网| 国产小u女在线观看| 欧美后入式| 婷婷综合视频| 国产1024在线播放| 狠狠躁天天躁日日躁| 操逼www.| av影院十区| 久久久久久亚洲精品不卡人乳| 午夜精品久久99蜜桃的功能章节| 国产不卡片| 欧美偷拍区| 中文字幕伊人| 五月激情影院| 四虎午夜影院| 亚洲不卡一| 91粉芽高清在线一区二区| 天天躁日日躁狠狠躁| 亚洲永久AV无码精品秋霞| αⅴ天堂| 欧洲人妻视频| 欧美午夜视频| 亚洲五月丁香花狠狠干一区二区三区 | 欧美少妇色图| 日韩人妻丝袜美腿中文| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 久久99久久99久久99人受| 国产精品操| 中文字幕AV片| 国内一级精品| 亚州色站 日韩电影| 国产999精品久久久| 中文字幕在线观看第二页| 操逼国产免费| 五月情色天| 久久久婷婷| 99人人干| 操逼片国产| 羞涩视频| 亚洲 日本 不卡| 免费看污网址| 欧美九九爱| 黄色一级视| 精品国模无码| 亚洲少妇视频| 啊啊啊啊啊好舒服视频| 伊人97色天使| 色色99| 乱伦av麻豆| 亚洲视频中文一区| 国产精品播放| 国产精品97视频| 后X久久| 樱花蜜乳av| 亚洲欧美首页| 欧美色91| 青青草原成人| 青青草无码视频| 色999偷自拍拍| 神马福利久草| 志村玲子视频一区二区| 亚洲aV无码成人在线观看| 亚洲第一精品在线视频 | 国产啊v在线免费播放| 懂色aV一区二区天美传媒| 情色大香蕉| 欧美丝袜美女电影一二三四区| 天天碰操中国年青熟妇| 九月丁香婷婷| 人妻在线臀日韩| 大稥蕉免费视频这里只有精品| 狠狠狠狠狠狠| 日日干夜夜干| 夂久色| 五月婷在线| 91超级碰碰碰| 国产精品色| 大香蕉亚洲中文| 麻豆人妻精品一区二区| 亚洲色图大香| 日韩99999色| 欧色综合| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 久操免费观看| 天天操夜夜操| 一级性爱视频免费观看| 超清福利精品视频在线| 91九色蝌蚪在线观看| 蜜桃视频成a人v在线| 日本视频在线观看污污污| 把腿张开老子CAO烂你| 全球成人中文在线| 九九av| ′ !γ}丶。。久久精品欧美一区二区三区 | 亚洲精品视频二区| 一区,二区,三区网站| 色婷婷综合久久久久中文一区二区| 夜夜嗨AV蜜臀av| 性色国产东北露脸精品视频| 日韩欧美资源| 美女诱惑久久| 成人无码在线视频网站| 留下AⅤ黄色片| 99视频内射三四| 亚洲成人一二三区| 97精品在线| 亚洲色阁| 国产三级多多影院2022国产AA一级毛片无码| 看黄片视频免费| 婷婷五月天丁香| 久操操| 日曰骚久久精品| 女性喷水高潮在线观看| 蜜乳AV一区二区三区四| 亚洲综合小说另类图欧美视频激情小说色五月天 | 婷婷15月天青娱乐| 天天综合网在线91| 国产对白刺激视频| 亚洲色婷婷| 99国产精品免费| 久久久青青草| 综合久久久久久久综合网| 色色婷婷五月天| 天天享受天天看| 夜夜高潮夜夜爽夜夜爱爱一区 | 天天享受天天看| 青青草五月份天| 久久免费99精品久久久久久| 国产伦精品一区二区三区在线观| 日本999精品视频| 亚洲深夜福利| 333kkkk·亚洲com久久| 久久人妻97久久久久久久| av草草在线电影| 免费视频在线一区二区不卡| 狠狠狠狠狠狠| 夜夜免费视频| 日韩熟女乱伦中出| 99啪啪视频| 久久一区二区蜜桃| 日本午夜福利影院| 婷婷久草| av在线播放国产一区| 久久香蕉国产传媒一区剧情天美| 五月天AV资源| 女人喷水视频在线观看| 骚逼一区二区| 性videos欧美熟妇hdx| 野狼激情网| 欧美色另类| 亚洲啪啪性视频| 久久综合久色欧美综合狠狠| 91性高朝久久久久久久久| 人妻天天夜夜爽一区二区| 亚洲精品蜜桃久久久| 操逼逼中文字幕| 怡红院成人av| 中文字幕五月婷婷免费| 日本 免费 一区二区三区 久久香蕉| 人妻精品一区二区| 91爽啪| 试看60秒 爽| 精品国产乱码久久久久A| 另类欧美色| 综合熟女| 99re9| 熟女丝袜视频| 精品无码一区二区三区色欲| 成人精品视频一区二区| AV一区观看| 一直超碰| 黄色免费网页无码| 久久久天堂| 五月丁香影院| 国产偷人伦激情在线观看| 色精品极品| 欧美综合国产精品久久丁香| 熟女一区二区三区| 久久久精品无码亚免费| 正宗无毛一线天嫩逼| 激情99| AV乱伦国产| 日韩操呦呦影院在线观看| 久久性爱网站| 精品少妇99| 欧美久久婷| 狠狠中文字幕| 四虎AV在线播放| 台欧久久精品视频| 国产日韩区| 国产97在线播放| 超碰日本97美女人妻人人玩人人爱| 网友自拍第一页| 青青草视频导航官网| 婷婷午夜成人色中色| 精品一区二区三区18| 偷拍网站久久男女男| 日本成人A片网站| 成人资源中文字幕在线观看| 亚洲欧美一区二区三区在钱蜜桃| 在线无码视频| 日韩BBN| 青青草吊丝| 久久久精品无码亚免费| 国产日韩久久| 日日骚精品视频| 日韩三级视频一区二区三区| 日本操逼视频不卡直接放| 东京热伊久| 91亚州欧美| 九九热AV| 久草网站免费在线观看| 91丝袜在线播放| 国产精品久久久久久久久久久久久久久久 | 这里有精品| 国产精品国产自产高清AV| 一本色道久久综合狠狠操| 久久这里都是精品| 日本三级R| 成人免费毛片| 久久这里只有精品9| 黄色十八禁| 少妇天堂网络| 丁香色婷婷| 色翁荡息又大又硬又粗又爽| 东京热天堂网| 欧美同性恋 的搜索结果 - 91n| 精品美女在线视频| 亚洲另类综合欧美| 国产精品久久伊人| 精品无码久久久久久国产浪潮| 国产9l 大屁股| 久久久久久少妇| 中文字幕-区二区三区四区视频中国| 中文字幕jul-617人妻熟女| 在线看的av| 人人么人人操| 丰满人妻一区二区三区免费| 久久久久久中文| 九九九九免费高| 中文字幕片| 久久久噜噜噜久久久| 五月天婷婷综合| 久久久精品成人国产| 可能人人看人人摸| av最新免费中文字幕| 操啊国产| 青娱乐999| 26uuu最新| 好色综合| 国产操逼网站亚洲一级黄色| 中文字幕三四区| 亚洲欧美人妻| 欧美人体性爱互联网第一页婷婷日本| 欧美 亚洲精品首页| 激情婷婷黑人91| 国产精品久久久午夜夜伦鲁鲁| 日韩精品影视| 伊人久大| 夜夜嗨一区二区三区直播内容| 青青久日| 中文三一区| 偷拍盗拍亚洲色图图片 | 99热色精品| 久热免费视频| 97超碰jingpin| 3571色综合一区二区二区| 一区二区三区精品黑丝白丝酒店对鸡| 99久视频| 国产精品91一样| 欧美黑人与女人91~| 吉川爱美98堂在线| 高清肉丝中文无码| 死我十八禁| 天天日天天看| 天天影视色香欲综合网小说| 国产在线强奸视频| 99久久精品国产高潮| 国产亚洲99久久精品| 亚洲色鬼| 亚洲自拍一区夜夜操| 亚洲高清少妇| 中国熟妇| 国产JDAV无码视频在线观看| 天天色,天天干,天天干| 中文字幕亚洲在线一区 | 日韩性爱长视频免费| 亚洲色欲天天天堂色欲网女| 天天躁日日躁XXXXYY| 天天干天天做| 美腿丝袜偷拍亚洲欧美| 嫩草91| 在线中文字幕视频| 欧洲亚洲国产综合在线| 亚洲四虎熟女精品| 九九九九九九亚洲| 丝袜高跟澳门91视频| 亚洲欧美黄| 日韩精品人妻一| 婷婷五月天在线观看| 99热在线不卡| 久久久久久人体| 日本韩国国产精品一区| 欧美黄片视频在线观看免费 | 嗯嗯,好大,好爽,好骚 | 午夜男人一级A片7777| 性色高清在线| 91制服丝袜| 欧美日韩另类在线播放| 五月激情小说| 久久熟女久| 思思久热在线精品66| 久久婷婷综合国际产色怕| 99国产精品在线观看| 素人伊尹大香蕉免费下载视频| 精品人妻一二三| 国模精品娜娜一二三区 | 欧美综合娱乐久久| 蜜色网色哟哟| 欧美日韩不卡传媒| 亚洲AV无码AV吞精久久久久| 欧美亚洲激情小说| 日日AAvv| 亚洲情色中文字幕一区| 久久嫩草国产成人一区| 日韩有码中文字幕女同性恋 | 日韩久草| 涩涩涩综合| 97国产精品国| 久久婷婷成人综合色怡春院| 欧美视频一区二区在线| 精品国产72| 亚洲影院成人| 欧美图片偷拍| 春色91| 中文字幕性感少妇av| 国产白丝在线| 黄色人人| 91欧美偷拍| 黄色大片视频在线免费看| 久草大| 蜜桃网熟妇| 黑人无码一区二区| 96久久久精品| 亚洲囯产精品女人久久久| 欧美美女在线高潮999| 欧美色涩| 久jiu久神马影院| 精品无吗m| 91大胆欧美| 少妇久久久久久久| 欧美午夜精品久久久久久3D| 色97干| 日本三级黄页| 日韩97P| 美女露胸露奶头| 无码高清操逼| 欧美激情超碰777| 欧美自拍偷拍综合图片| 国产AV天美| 大香蕉黄色一级片免费看| 天天碰操中国年青熟妇| 操逼视频色| 亚洲和欧美裸体美女双飞视频| 蜜乳Av成人片网站| 午夜福利在线合集| 97摸视频| 亚州综| 精品人妻二区三区| 亚洲无码成人精品| 欧美日韩青操| 日韩女模中文造逼| 草草草视频| AV天堂电影网| 少妇人妻好深太紧了vr91| 97超碰色中文字幕| 天天干天天插| 久久在线观看免费视频| 精品性爱久久视频| 90后性网国产欧美| 美女久久久| 97精品视频免费| 熟女精品va中文字幕| 精品国产乱码久久久久久久久久毛片| 亚洲精品99| 三级精品三级在线观看| 国产情色在线| 亚洲少妇色| 欧美伊人久久综合网| 色97综合中文字幕| 亚 欧 美 综合| 亚洲一区二区三区播放在线| 少妇九九九九| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 国产视频一区二区三区在线免费观看| 综合久久99亚洲人妻中文在线| 午夜福利成人免费视频| 一级乱伦网站| 色香综合天天影视综合 | 手机在线中文字幕国产 | 婷婷色婷婷| 伊人丁香五月婷婷| 伊人国产AV| 97久久精品国产| 91性高潮久久久久久久久| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 玖玖爱在线视频免费观看| 嗯~啊~快点 死我视频免费看网站| 99爱精品| 久久久久久日韩| 美女诱惑久久| 激情五月天校园春色网| 欧插网站| 婷婷AV一区二区三区| 亚洲av无码成电影在线播放| 78精品在线| 久久人妻无码毛片A片麻豆| 久久免费中文字幕在线观看| 日本一本道A级黄色毛片试看60分钟| 九九九热| 国产精品丝袜在线| 中文字幕伊人| 一区二区 日韩 欧美 国产 传媒| 国内外色色色色色成人视频| 国产精品欧美日韩久久| 亚洲色婷婷久久久综合日本| 天美麻豆黄色录像| 神马久久久久久久久久久久| 欧美|91色综合| 欧美日韩性爱视屏免费看了| 黄色一区二区秘书性感| 99婷婷一区二区| 999久久久九九九九| 97操97干| 男人的天堂三级| 丰满人妻一区| 欧美亚州综合图片| 97se综合网| 大香蕉综合| 久久国产99精品72福利| 亚洲天堂区| 婷婷激情啪啪| 丁香五月色情| 国产又爽又黄| 日本三级韩三级99久久| 干婷婷综合网| 久草免费在线一区二区| 噜噜噜在线视频| 免费一级a毛片久久久久久鸭绿欲| 97久久超碰| 国产成人久久精品蜜臀| 爱逼综合| 亚洲无 码A片在线观看麻豆| 国产一二三在线视频五十路| 久久精品操| 九九五月天| 精品国产乱码久久久久久免费| 2003天天干夜夜操| 国产黑白丝在线| #NAME?| 久久爱97| 五十路熟女人妻一区二区在线观看| 97超级久久| 男女国产精品| V A在线| 欧美v亚洲v综合v国产v妖精| www.99色| 亚洲天堂AV在线播放| 国产精品呦一区二区三区| 亚洲AV无码AV吞精久久久久| 性爱乱伦网址| 天天干,夜夜爽| 亚洲天堂女优在线| 亚欧中文字幕在线视频| 久久久久78| 少妇特黄一区二区三区| 色色九区| 人人人摸人人| 国产高清在线观看欧美| 动漫爆乳3D奶水一区在线观看 | 久久久青青草| 探花视频免费观看国产专区| 亚洲欧美精品国产一区二区| 99性爱在线观看| 国产日比| 天天综合欧美综合| 国产免费一区| 啊啊嗯嗯好爽| 国产日产精品久久快鸭的功能介绍| 最新中文字幕精品在线| 天天干,夜夜爽| 另类亚洲图色| 一本一道久久综合久久| 超碰97中文| 欧美丰满少妇xx高潮| 国产欧美一区激情交| 北京专精特新企业招聘信息| 久久久不卡区一区二区三区久久久| 激情久久日韩精品中文字幕麻豆| 美女91| 秋霞久久亚洲精品成人| 色婷婷在线视频| 欧美亚洲美少妇一区二区| 91麻豆天美国产欧美高潮| 国语av狠狠色丁香婷婷综合激情| 欧美日韩国产中文精品字幕自在自线| 久久激情视频| 精品无码久久久久| 久久超碰日韩精品| 久操视频资源站公开| 国产视频三区四区| 91碰碰| 国产肏逼网站| 婷婷伊人网| 伊人久久久日韩一区| 欧美性夜| 国产强奸超碰AV| 蜜桃久久久久久久| 久久黄黄黄| 91快色色色色色| 人人色人人射人人妻| 深夜激情 | 国产性感在线观看| 密臀在线一区尤物| 九月丁香综合网| 亚洲人妻熟妇三十三区| 91综合网在线| 两性综合网| 亚洲天堂美臀在线| 人人操人人插 - 百度 - 百度| 五月激情综合网| 色偷偷综合91久久噜噜| 国产极品精品美女视频| 一牛影视久久久一区二区三区| 国产嫩草精品A88AV| 丝袜剧情| 亚洲天堂情色| 国产一区二区免费福利片| 翘臀vidoes| 91精品网站| 婷婷色在线| 亚洲综合色图欧美| 乱伦系列一区二区| 91美女国产在线| 91人妻中文| 天堂涩涩| 男人高清无码一区二区| 中文字幕人妻色偷偷久久皮| 成年人网站在线免费观看| 国产高清1234区| 色五月av| 日韩天美| 日韩亚洲欧美中文字幕| 激情自拍 校园春色| 玖玖久久久| 免费观看欧美日韩操逼视频| 蜜臀99久| 91在线页| 日韩肏逼视频| 天天日日本| 免费αV在线视频| 久草新免费| 91在线超高颜值国产| 色超碰综合| 国产网站在线播放| 91精品操美女| 亚欧性爱ab| 人妻久久| 青青草自拍视频在线播放| 久久无码一区二区二三区性色| 久久大香蕉手机高清| 国产JDAV无码视频在线观看| 涩亚洲欧洲| 青青草亚洲一区 | 亚洲日韩少妇一道本视频| 人人射人人操人人摸| 色汉综合| 天天操福利视频综合网站| 天天综合香 ld视频| 天天色,天天干,天天干| 欧美综合中文| 亚洲三级。日韩三级| 9999伦理视频| 97激情97激情| 久久久久无码| 大香蕉伊人亚洲| 97国产高清视频在线观看| 中文字幕视频二区| 97视频在线观看网站| 天美传媒av一区二区| 国产乱伦视频污| 欧亚在线视频| 97超级久久强资源| 亚洲成人黄色在线观看| 91nbbbbbb| 啪啪综合网| 亚洲黄片免费在线播放| 欧洲亚洲人人爽爽视频| 大香蕉久久| 影音先锋每日最新资源在线观看| 强奸熟女一区二区三区| 婷婷五月天基地| 精品久久久久久无码| 91九色丰满高潮| 91啪9色| AA特级绝黄| 亚洲不卡三级手机播放| 嫩草 我啊~嗯~在线| 久久久久精| 欧美精品久久久久久久久88| 久久久久九九九| 91N综合网在线| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 91女网站| 欧美啪啪女女| 免费?级毛片无码?∨蜜芽试看| 91操熟女视频| 97欧美色资源| 九九热精品免费视频| 色综合久| 欧美日韩黄片精品在线| 亚洲熟女诱惑| 精吧天堂| 熟女中出视频| 免费看毛片操穴| 亚洲一区二区三区欧美日韩| 思思久热在线精品66| 91丝袜人妻| 国产欧美后入| 欧美丝袜激情| 成人贴图日韩欧美| 人妻少妇av在线观看| 日韩性爱视频在线免费观看| 超碰97人妻在线| 97亚洲色图| 97超级色碰碰| 亚洲天天影视综合网| 一道本东京热加勒比一区二区三区| 成 人 A V免费视频在线观看| 亚洲国产精品有声| 1240青青草一区二区三区视频天爱| 操老熟女AV| 怡春苑东京热| 亚洲AV免费在线观看| 人妻少妇色综合| www国产天美久久久| 国产精品视频麻豆入口| 亚洲一区在线观看欧洲| juliaann丝袜| 亚洲男人天堂网站| 蜜桃午夜视频一区二区 | 亚洲āv网址在线观看| 亚洲欧美日韩不卡人妻| 欧美韩日精品99综合| 一本色道久久综合亚洲二区三区| 亚洲资源网| 新精精品久久精品| 中国熟女网站| 老司机免费视频在线91| www.99热在线只有精品| 97久久精品亚洲中六字幕| 嗯嗯啊啊操死我| 800zy一区二区| 大香蕉 222| yiren97| 天天日日本| 区一二区日韩亚洲乱码av电影| 嗯阿好爽好紧| 日韩少妇丰满亚洲| 99热导航| 98超碰日本| 女上位精品在线| 日本二区不卡| 亚洲视频精选| 国产精品人妻无码久久久互動交流 | 天综合网欧美| 夜夜做夜夜爽精品视频| 密臀成人视频久久久|