青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大漠落日

while(!dead) study++;
posts - 46, comments - 126, trackbacks - 0, articles - 0
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
以前學(xué)習(xí)ICMP協(xié)議時(shí)候?qū)懙囊粋€(gè)模仿windows自帶的ping程序,今天翻代碼看到了,貼上來(lái)供大家拍磚。


2010-12-15日更新補(bǔ)充:這段代碼獲取的是第一個(gè)活動(dòng)網(wǎng)卡IP來(lái)發(fā)送ICMP報(bào)文,如果有多個(gè)網(wǎng)卡,例如插網(wǎng)線和wifi網(wǎng)卡同時(shí)開(kāi),那么就由插網(wǎng)線的網(wǎng)卡發(fā)送,如何讓wifi網(wǎng)卡發(fā)送呢?很簡(jiǎn)單,加一個(gè)-p [bindLocalIP]參數(shù)就可以了,bindLocalIP就是指定綁定了某個(gè)IP網(wǎng)卡發(fā)送ICMP報(bào)文,而不是由gethostname來(lái)獲取,因?yàn)楹芎?jiǎn)單,所以代碼就懶得修改了,畢竟是多年前的代碼了。

本人已經(jīng)在2K(32),XP(32),VISTA(64),WIN7(32)下測(cè)試過(guò),一切正常。

    

/*******************************************************************
    
        程序:  myping
        功能:  模擬ping命令
        O/S :   WINDOWS 98或更高版本
        作者:  嚴(yán)政
        時(shí)間:  2007.8.14
        版本變更:
                V1.0.0   2007.8.14  初始版本,實(shí)現(xiàn)了基本的ping功能 
        說(shuō)明:  
                這是開(kāi)源代碼,你可以隨意拷貝使用。如果你有好的建議或
                意見(jiàn),發(fā)E-mail至: [ yzljlss@126.com ]討論。
******************************************************************
*/
#include 
<stdio.h>
#include 
<WINSOCK2.H>

#pragma comment(lib,
"wsock32.lib")
#pragma comment(lib,
"Ws2_32.lib")

#define SIO_RECALL _WSAIOW(IOC_VENDOR,1)
#define MAX_HOSTNAME_LEN 256

sockaddr_in LocalAddr,SendAddr,destAddr;
SOCKET sock;

struct hostent FAR *pHostent, *pTmp;

int total = 4;//發(fā)送ping報(bào)文次數(shù),默認(rèn)為4次
int seconds = 0;//發(fā)送時(shí)間間隔
bool hostToIp = false;//-a 將目標(biāo)的機(jī)器標(biāo)識(shí)轉(zhuǎn)換為ip地址 
bool pingforever = false;//-t 若使用者不人為中斷會(huì)不斷的ping下去
bool isCount = false;//-c count 要求ping命令連續(xù)發(fā)送count個(gè)數(shù)據(jù)包
bool isSimple = false;//-q ping只在開(kāi)始和結(jié)束時(shí)打印一些概要信息

char FAR name[MAX_HOSTNAME_LEN];
char destIP[16];//目標(biāo)IP

typedef 
struct _ping
{
    UCHAR i_type;
//8位類型
    UCHAR i_code;//8位代碼
    USHORT i_chksum;//16位ICMP校驗(yàn)和
    USHORT i_identify;//16位標(biāo)志位
    USHORT i_seqnum;//16位序號(hào)
    ULONG    i_timestamp;//32位時(shí)間戳
    UCHAR i_data[32];//32BYTE選項(xiàng)數(shù)據(jù)
}PingHeader,*pPingHeader;

typedef 
struct     _ipHeader//IP頭部,總長(zhǎng)度20字節(jié)
{
#if LITTLEENDIAN
    UCHAR IpHlen:
4,        //4位首部長(zhǎng)度
          IpVer :4;        //4位IP版本號(hào)
#else
    UCHAR   IpVer :
4,        //4位IP版本號(hào)
            IpHlen:4;        //4位首部長(zhǎng)度
#endif
    UCHAR  IpTos;
//8服務(wù)類型
    USHORT IpTlen;//總長(zhǎng)度
    USHORT IpId;//標(biāo)志    
    USHORT FlagsOff;//分片偏移
    UCHAR  IpTtl;//生存時(shí)間
    UCHAR  IpProto;//協(xié)議    
    USHORT ChkSum;//檢驗(yàn)和
    struct in_addr   SourIp;//源IP地址    
    struct in_addr   DestIp; //目的IP地址
} IpHeader,*pIpHeader;

//求校驗(yàn)和
USHORT checksum(USHORT *buffer, int size)
{
    unsigned 
long cksum = 0;
    
while(size > 1)
    {
        cksum 
+= *(buffer++);
        size 
-= sizeof(USHORT);
        
    }
    
if(size)
        cksum 
+= *(UCHAR*)buffer;
    cksum 
= (cksum >> 16+ (cksum & 0xffff);
    cksum 
+= (cksum >> 16);

    
return (USHORT)(~cksum);
}

//幫助信息
void help()
{
    printf(
"==========================[ myping V1.0.0 ]============================ ");
    printf(
" 用法: myping [-a] [-t] [-c count] [-i seconds] [-q] [-h] target_IP ");
    printf(
"參數(shù): ");
    printf(
" -a     將目標(biāo)的機(jī)器標(biāo)識(shí)轉(zhuǎn)換為ip地址 ");
    printf(
"     建議: ping遠(yuǎn)程主機(jī)時(shí)不要添加此參數(shù),否則速度較慢 ");
    printf(
" -t     若使用者不人為中斷會(huì)不斷的ping下去 ");
    printf(
" -c count    要求ping命令連續(xù)發(fā)送count個(gè)數(shù)據(jù)包 ");
    printf(
" -i seconds  在兩次數(shù)據(jù)包發(fā)送之間間隔一定的秒數(shù) ");
    printf(
" -q     myping只在開(kāi)始和結(jié)束時(shí)打印一些概要信息 ");
    printf(
" -h     幫助信息 ");
    printf(
"例如: myping -a -i 1 -c 10 192.168.0.100 ");
    printf(
"=========================[ By 嚴(yán)政 07.8.14 ]=========================== ");
}

//發(fā)送,解析PING報(bào)文
int funPing()
{
    unsigned 
long i,
        totalrecv
=0;//收到包的數(shù)目
    unsigned long addr, timestamp,
        maxtime 
= 0,//最大延遲
        mintime = 0;//最小延遲
    PingHeader ping,*ping_hdr;
    
char recv_buff[65535];
    
char szDestIP[16];
    
int recvLen;

    pIpHeader ip_hdr;

    SendAddr.sin_family 
= AF_INET;
    SendAddr.sin_addr.s_addr 
= inet_addr(destIP);
    
    
if(hostToIp)
    {
        memset(name, 
0, MAX_HOSTNAME_LEN);
        
//獲取ping對(duì)象主機(jī)名
        addr = inet_addr(destIP);
        pHostent 
= gethostbyaddr((char *)&addr, sizeof(destIP) , AF_INET);
        
if(pHostent == NULL)
        {
            
//printf("fail to get host name: %d ",WSAGetLastError());
            fprintf(stdout, "Ping %s with 32 bytes of datas: ",destIP);
        }
        
else
            fprintf(stdout, 
"Ping %s[ %s ] with 32 bytes of datas: ", pHostent->h_name, destIP);
    }            
    
else
        fprintf(stdout, 
"Ping %s with 32 bytes of datas: ",destIP);
    
    
for(i=0;;i++)
    {
        
if(!pingforever)
        {
            
if(i >= (unsigned long)total)//達(dá)到發(fā)送次數(shù)
                break;
        }
        
        
//填充PING報(bào)文
        ping.i_type = 8;
        ping.i_code 
= 0;
        ping.i_seqnum 
= (USHORT)i;
        ping.i_identify 
= (unsigned short)GetCurrentProcessId(); 
        ping.i_timestamp 
= (unsigned long)::GetTickCount();
        
for(int j=0;j < 32; j++)
            ping.i_data[i] 
= (UCHAR)('a'+j);
        ping.i_chksum 
= 0;
        
//計(jì)算校驗(yàn)和
        ping.i_chksum = checksum((unsigned short*)&ping,sizeof(ping));
        
//printf("checksum=%d ",ping.i_chksum);
        
        
if(sendto(sock, (char*)&ping, sizeof(ping),0, (struct sockaddr*)&SendAddr, sizeof(SendAddr)) == SOCKET_ERROR)
        {
            printf(
"Send ping packet error: %d ",WSAGetLastError());
            
return -1;
        }
        
        memset(recv_buff, 
01024);
        
int len = sizeof(destAddr);
        
if((recvLen = recvfrom(sock, recv_buff, sizeof(recv_buff), 0, (struct sockaddr*)&destAddr, &len)) == SOCKET_ERROR)
        {
            
int err = WSAGetLastError();
            
if(err != 10060)//超時(shí)錯(cuò)誤不返回
            {
                printf(
"recv data error: %d ",err);
                
return -1;
            }
            
else if(!isSimple)
                fprintf(stdout, 
"請(qǐng)求超時(shí). ");
        }
        
if(recvLen > 0)
        {
            
            
//處理接收的IP報(bào)文,解析PING應(yīng)答報(bào)文
            ip_hdr = (pIpHeader)recv_buff;

            memcpy(szDestIP, inet_ntoa(ip_hdr
->SourIp), 16);
            
if(ip_hdr->IpProto == IPPROTO_ICMP && !strcmp(szDestIP, destIP))//處理來(lái)自PING對(duì)象且是ICMP的報(bào)文
            {
                ping_hdr 
= (pPingHeader)(recv_buff + sizeof(unsigned long)*ip_hdr->IpHlen);
                
            
//    fprintf(stdout,"ping_hdr.i_type=%02X ",ping_hdr->i_type);
            
//    fprintf(stdout,"ping_hdr.i_code=%02X ",ping_hdr->i_code);
            
//    fprintf(stdout,"ping_hdr.i_seqnum=%04X ",ping_hdr->i_seqnum);
            
//    fprintf(stdout,"ping_hdr.i_identify=%04X ",ping_hdr->i_identify);
            
//    fprintf(stdout,"ping_hdr.timestamp=%08X ",ping_hdr->i_timestamp);
                
//應(yīng)答報(bào)文
                if(ping_hdr->i_type == 0)
                {
                    
//計(jì)算延遲時(shí)間
                    timestamp = (unsigned long)::GetTickCount();
                    timestamp 
-= ping_hdr->i_timestamp;
                    
if(i == 0)
                        mintime 
= timestamp;
                    maxtime 
= (timestamp > maxtime) ? timestamp : maxtime;//最大延遲時(shí)間
                    mintime = (timestamp < mintime) ? timestamp : mintime;//最小延遲時(shí)間

                    
if(timestamp == 0)
                        timestamp 
= 1;
                    
if(!isSimple)
                        fprintf(stdout, 
"Reply from %s: bytes=%d time<%dms TTL=%d ", destIP, 
                            
sizeof(ping_hdr->i_data), timestamp, ip_hdr->IpTtl );
                    
//收到包的數(shù)目
                    totalrecv++;
                }
                
if(ping_hdr->i_type == 3)
                {
                    fprintf(stdout, 
"目的不可達(dá)");
                    
switch(ping_hdr->i_code)
                    {
                    
case 0:
                        fprintf(stdout, 
"(網(wǎng)絡(luò)不可達(dá)) ");
                        
break;
                    
case 1:
                        fprintf(stdout, 
"(主機(jī)不可達(dá)) ");
                        
break;
                    
case 2:
                        fprintf(stdout, 
"(協(xié)議不可達(dá)) ");
                        
break;
                    
case 3:
                        fprintf(stdout, 
"(端口不可達(dá)) ");
                        
break;
                    
default:
                        
break;
                    }
                }
                
if(ping_hdr->i_type == 5)
                {
                    
if(ping_hdr->i_code == 0)
                        fprintf(stdout, 
"對(duì)網(wǎng)絡(luò)重定向. ");
                    
if(ping_hdr->i_code == 1)
                        fprintf(stdout, 
"對(duì)主機(jī)重定向. ");
                }
                
            }
        }
        Sleep(seconds);
    }
//end for
    
    
//計(jì)算ping統(tǒng)計(jì)信息
    fprintf(stdout, " Ping %s 的統(tǒng)計(jì)信息: ",destIP);
    fprintf(stdout, 
" 包: 發(fā)送 = %d, 收到 = %d, 丟失 = %d (丟失率: %.0f%%) ",
        i, totalrecv, (i
-totalrecv), ((float)(i-totalrecv))/i*100 );
    
if(totalrecv != 0)//沒(méi)收到包打印路由信息無(wú)意義
    {
        fprintf(stdout, 
"近似路由時(shí)間(毫秒): ");
        fprintf(stdout, 
" 最大 = %dms, 最小 = %dms, 平均 = %dms ", maxtime, mintime, (maxtime+mintime)/2);
    }
    
return 0;
}

int main(int argc, char* argv[])
{
    DWORD lpvBuffer 
= 1;
    DWORD lpcbBytesReturned 
= 0;
    
    
int nNetTimeout=3000;//超時(shí)3秒
    
    
//初始化套結(jié)字
    WSADATA WSAData;
    
if(WSAStartup(MAKEWORD(2,2), &WSAData) != 0)
    {
        printf(
"fail to init socket: %d",WSAGetLastError());
        
return -1;
    }
    
//創(chuàng)建套結(jié)字
    sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (
char *)&nNetTimeout,sizeof(int));

    
if(sock == SOCKET_ERROR)
    {
        printf(
"fail to create socket: %d",WSAGetLastError());
        
return -1;
    }
    
//獲取本機(jī)IP
    if(gethostname(name, MAX_HOSTNAME_LEN))
    {
        printf(
"get host name error: %d",WSAGetLastError());
        
return -1;
    }
    pHostent 
= (struct hostent *)malloc(sizeof(struct hostent));
    pTmp 
= pHostent;
    pHostent 
= gethostbyname(name);
 
    LocalAddr.sin_family 
= AF_INET;
    LocalAddr.sin_port 
= htons(0);
    memcpy(
&LocalAddr.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length);
    
    
//bind socket
    if(bind(sock, (struct sockaddr *)&LocalAddr, sizeof(LocalAddr)) == SOCKET_ERROR)
    {
        printf(
"bind error: %d",WSAGetLastError());
        
return -1;
    }
/*    
    //置網(wǎng)卡為混雜模式
    //在這個(gè)ping程序中,不能將網(wǎng)卡置于混雜模式,否則接收的報(bào)文包括自己發(fā)送的報(bào)文 (^_^)
    if(WSAIoctl(sock, SIO_RECALL, &lpvBuffer ,sizeof(lpvBuffer), NULL, 0,
        &lpcbBytesReturned, NULL, NULL) == SOCKET_ERROR)
    {
        printf("WSAIoctl() error: %d",WSAGetLastError());
        return -1;
    }
*/    
    
//命令行解析
    if(argc < 2)
    {
        printf(
"必須輸入ping參數(shù)! ");
        help();
        
return -1;
    }
    
else
    {
        
for(int i=1; i < argc; i++)
        {
            
if(argv[i][0== '-')
            {
                
switch( (tolower(argv[i][1])) )
                {
                
case 'a':
                    hostToIp 
= true;
                    
break;
                
case 't':
                    pingforever 
= true;
                    
break;
                
case 'h':
                    help();
                    
return -1;
                    
break;
                
case 'q'://ping只在開(kāi)始和結(jié)束時(shí)打印一些概要信息
                    isSimple = true;
                    
break;
                
case 'c':
                    {
                        
if*(argv[i]+3> '9' || *(argv[i]+3< '0' )
                        {
                            printf(
"ping次數(shù)錯(cuò)誤參數(shù)! ");
                            help();
                            
return -1;
                        }
                        
//發(fā)送報(bào)文次數(shù)
                        total = atoi(argv[++i]);
                        
break;
                    }
                
case 'i'://設(shè)置發(fā)送報(bào)文時(shí)間差
                    {
                        
if*(argv[i]+3> '9' || *(argv[i]+3< '0' )
                        {
                            printf(
"時(shí)間錯(cuò)誤參數(shù)! ");
                            help();
                            
return -1;
                        }
                        
//發(fā)送報(bào)文次數(shù)
                        seconds = atoi(argv[++i]) * 1000;
                        
break;
                    }
                
default:
                    
break;
                }
//end switch
            }//end if
        }//end for
        
        
if( (argv[argc-1][0]) > '9' || (argv[argc-1][0]) < '0' )
        {
            printf(
"目的IP錯(cuò)誤!請(qǐng)確認(rèn)最后一個(gè)參數(shù)是目的IP. ");
            help();
            
return -1;
        }
        
        memcpy(destIP, argv[argc
-1], strlen(argv[argc-1]));
    }
    
//發(fā)送ping報(bào)文
    funPing();

    free(pTmp);
    closesocket(sock);
    WSACleanup();

    
return 0;
}


Feedback

# re: 自己寫(xiě)的一個(gè)ping程序[未登錄](méi)  回復(fù)  更多評(píng)論   

2009-09-15 17:56 by foxriver
為了安全因素,SOCK_RAW在現(xiàn)在的操作系統(tǒng)上不支持了吧,只能用IMCP開(kāi)頭的API。

個(gè)人網(wǎng)絡(luò)項(xiàng)目里,ping值一直是用socket連接后,發(fā)個(gè)小包計(jì)算返回時(shí)間,實(shí)際測(cè)試效果也不錯(cuò)。

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2009-09-16 15:25 by 羅萊家紡
搞得不錯(cuò)啊~

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2009-09-18 11:43 by 亂78糟
@foxriver
VISTA之后就禁止了,XP下沒(méi)問(wèn)題的。

非常感謝提醒返回時(shí)間的計(jì)算方法

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2009-09-24 09:54 by 過(guò)客
for(int j=0;j < 32; j++)
ping.i_data[i] = (UCHAR)('a'+j);

循環(huán)的ping.i_data[i] or ping.i_data[j]?

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2009-09-24 11:00 by 亂78糟
@過(guò)客
因?yàn)閜ing報(bào)文的數(shù)據(jù)段可以使任意數(shù)據(jù),所以填什么無(wú)所謂,不過(guò)的確是我寫(xiě)錯(cuò)了,應(yīng)該是j,不是i

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2011-05-31 16:43 by 游客
為什么我在win7下運(yùn)行程序直接到末尾了,沒(méi)報(bào)錯(cuò)什么的,直接就結(jié)束,沒(méi)有提示輸入?yún)?shù)

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2012-05-02 09:54 by 吳同學(xué)
十分感謝分享,正在學(xué)習(xí)

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2014-03-04 10:35 by 黑魚(yú)
象天書(shū),完全不懂

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2015-04-23 16:59 by 8
@游客
我的也是

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2015-04-23 17:02 by 8
程序直接進(jìn)入
if(argc < 2)
{
printf("必須輸入ping參數(shù)! ");
help();
return -1;
}
循環(huán)后結(jié)束,提示輸入?yún)?shù),但是應(yīng)該怎樣輸入?yún)?shù)?謝謝!

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2015-06-26 16:46 by smagle
@8
help()里有提示的,例如:myping -a -i 1 -c 10 192.168.0.100

# re: 自己寫(xiě)的一個(gè)ping程序  回復(fù)  更多評(píng)論   

2016-03-23 17:24 by gu*

@游客
我的也是這種情況怎么回事啊到底
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久91精品国产| 久久亚洲国产精品日日av夜夜| 免费在线成人| 欧美成人三级在线| 夜夜嗨av色一区二区不卡| 亚洲久久视频| 国产欧美日韩激情| 麻豆精品视频在线观看| 免费人成精品欧美精品| 亚洲婷婷综合久久一本伊一区| 99综合精品| 国产欧美日韩精品a在线观看| 久久婷婷丁香| 欧美另类高清视频在线| 欧美一区二区在线| 久久综合图片| 午夜一级久久| 免费不卡在线观看av| 亚洲欧美精品| 免费看亚洲片| 久久国内精品视频| 欧美精品少妇一区二区三区| 久久精品国产一区二区三区| 欧美国产日韩亚洲一区| 欧美一区二区在线| 欧美日韩国产片| 久久综合九色综合久99| 欧美精品色综合| 久久国内精品自在自线400部| 久久久999国产| 亚洲永久网站| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲无限av看| 欧美激情亚洲另类| 久久五月天婷婷| 国产精品国产三级国产aⅴ无密码| 免费在线成人av| 国产精品入口麻豆原神| 最新国产精品拍自在线播放| 国产伦精品一区二区三区四区免费| 欧美激情一区三区| 国产农村妇女精品一二区| 亚洲日本精品国产第一区| 伊人久久久大香线蕉综合直播| 亚洲综合三区| 午夜精品久久久久久久| 欧美日韩国产欧| 亚洲精品视频在线播放| 亚洲免费观看高清完整版在线观看熊| 欧美在线啊v一区| 久久都是精品| 国产三级欧美三级日产三级99| 亚洲——在线| 午夜亚洲福利在线老司机| 欧美日韩专区| 在线视频精品| 午夜精品久久久久影视| 国产精品一区二区久激情瑜伽| 亚洲天堂成人在线观看| 亚洲一区中文| 国产精品亚洲人在线观看| 亚洲天堂久久| 久久精品国产亚洲aⅴ| 国内精品伊人久久久久av影院 | 亚洲欧美视频一区二区三区| 欧美性色综合| 亚洲欧美日韩一区在线观看| 久久riav二区三区| 国内精品一区二区三区| 蜜臀av一级做a爰片久久| 亚洲高清电影| 亚洲视频在线看| 国产日产欧产精品推荐色| 久久成人av少妇免费| 欧美成va人片在线观看| 99国产精品私拍| 国产精品xxxav免费视频| 亚洲天天影视| 久久久最新网址| 亚洲国产精品ⅴa在线观看 | 欧美aⅴ一区二区三区视频| 亚洲品质自拍| 性8sex亚洲区入口| 樱花yy私人影院亚洲| 欧美激情导航| 亚洲免费在线电影| 欧美激情日韩| 亚洲欧美日韩精品| 在线观看欧美成人| 欧美日韩视频在线观看一区二区三区| 亚洲一区视频| 欧美韩国一区| 欧美一区二区性| 久久视频精品在线| 一区二区av在线| 国产精品女主播一区二区三区| 久久国产88| 一区二区三区精密机械公司| 久久婷婷亚洲| 99www免费人成精品| 国产精品美女999| 男女激情久久| 欧美影院久久久| 国产精品99久久久久久久久久久久 | 亚洲午夜电影在线观看| 黄色亚洲大片免费在线观看| 欧美日产一区二区三区在线观看 | 久久久久欧美精品| 亚洲私人影吧| 亚洲第一黄网| 久久手机精品视频| 午夜视频在线观看一区二区| 亚洲第一色在线| 国产在线拍揄自揄视频不卡99| 欧美日韩在线观看一区二区三区| 久久久人人人| 欧美自拍偷拍| 亚洲欧美日韩一区二区在线| 一本色道久久综合亚洲精品小说| 欧美成人午夜77777| 久久久久高清| 午夜亚洲福利在线老司机| 亚洲深夜福利| 91久久精品一区二区三区| 黄网站色欧美视频| 国产一区免费视频| 国产麻豆综合| 国产欧美精品日韩区二区麻豆天美| 欧美日韩一区二区国产| 欧美人成在线| 欧美精品一区二区三区蜜臀| 欧美jjzz| 欧美激情视频一区二区三区免费| 免费在线日韩av| 蜜臀av国产精品久久久久| 久久久久久久久久久久久女国产乱| 午夜欧美电影在线观看| 亚洲欧美成人一区二区三区| 亚洲图片在线观看| 亚洲中午字幕| 欧美一级黄色网| 性欧美xxxx视频在线观看| 午夜精品短视频| 欧美制服丝袜| 久久免费国产| 欧美成人精品激情在线观看| 欧美成人一区二区三区在线观看| 免费不卡中文字幕视频| 欧美二区在线观看| 欧美人与性动交α欧美精品济南到| 欧美不卡一区| 欧美日韩在线免费观看| 欧美三级乱人伦电影| 欧美日韩一区在线| 国产精品无人区| 国产婷婷成人久久av免费高清| 国产专区欧美精品| 亚洲欧洲精品一区| 一区二区三区高清在线| 午夜在线视频观看日韩17c| 久久av一区二区三区亚洲| 另类av导航| 日韩视频在线一区二区三区| 亚洲一区欧美| 蜜桃久久精品乱码一区二区| 欧美日韩国产一区| 欧美一区日韩一区| 亚洲视频在线一区观看| 夜久久久久久| 欧美性jizz18性欧美| 国产精品久久久久av免费| 国产专区精品视频| 日韩西西人体444www| 久久大综合网| 日韩一区二区高清| 久久国产婷婷国产香蕉| 欧美理论片在线观看| 国产日韩精品一区二区三区在线| 亚洲高清在线| 午夜精品视频网站| 亚洲第一偷拍| 亚洲欧美影音先锋| 欧美日韩国产丝袜另类| 国产午夜亚洲精品不卡| 一区二区三区精品国产| 玖玖玖免费嫩草在线影院一区| 一区二区三区欧美| 女仆av观看一区| 国产综合久久久久久| 亚洲一区久久久| 亚洲国产精品一区在线观看不卡 | 亚洲美女性视频| 久久九九免费视频| 国产精品性做久久久久久| 日韩视频久久| 欧美激情国产日韩| 久久久精品五月天| 国产一区二区0| 欧美一区二区日韩| aa国产精品|