日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libpcap使用整理

發布時間:2024/3/26 编程问答 93 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libpcap使用整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

libpcap

簡介

Libpcap是Packet Capture Libray的英文縮寫,即數據包捕獲函數庫。該庫提供的C函數接口用于捕捉經過指定網絡接口的數據包,該接口應該是被設為混雜模式。這個在原始套接字中有提到。

功能

Libpcap主要有如下功能:
(1)數據包捕獲
捕獲流經本網卡的所有原始數據包,甚至對交換設備中的數據包也能夠進行捕獲,本功能是嗅探器的基礎。
(2)自定義數據包發送
構造任意格式的原始數據包,并發送到目標網絡,本功能是新協議驗證、甚至攻擊驗證的基礎。
(3)流量采集與統計
對所采集到的網絡中的流量信息進行按照新規則分類,按指標進行統計,并輸出到指定終端。利用這項功能可以分析目標網絡的流量特性。
(4)規則過濾
Libpcap自帶規則過濾功能,并提供腳本編程接口,能夠按照用戶編程的方式對已經采集到的數據包進行過濾,以便提高分析的性能。

原理

一個包捕獲機制包含三個主要部分,分別是面向底層的包捕獲引擎,面向中間層的數據包過濾器,面向應用層的用戶接口。
Linux操作系統對于數據包的處理流程是從底到上的方式,依次經歷網絡接口卡、網卡驅動層、數據鏈路層、IP層、傳輸層,最后到達應用程序。
Libpcap也是基于這種原理,Libpcap的捕獲機制并不影響Linux操作系統中網絡協議棧對數據包的處理。
對應用程序而言,Libpcap包捕獲機制只是提供了一個統一的API接口,用戶只需要按照相關的編程流程,簡單地調用若干函數就可以捕獲到感興趣的數據包。
具體來說,Libpcap庫主要由三個部分組成,網絡分接頭、數據包過濾器和用戶API。
(1)網絡分接頭
網絡分接頭(Network Tap)是一種鏈路層旁路機制,負責采集網卡數據包。
(2) 數據包過濾器
數據包過濾器(Packet Filter)是針對數據包的一種過濾機制,在Libpcap中采用BPF(BSD Packet Filter)算法對數據包執行過濾操作,這種算法的基本思想就是基于規則匹配,對伊符合條件的額數據包進行放行。
(3) 用戶API
用戶API是Libpcap面向上層應用程序提供的編程接口,用戶通過調用相關的函數實現數據包的捕獲或者發送。
具體來說,Libpcap的工作原理可以描述為,當一個數據包到達網卡時,Libpcap利用創建的套接字從鏈路層驅動程序中獲得該數據包的拷貝,即旁路機制,同時通過Tap函數將數據包發給BPF過濾器。
BPF過濾器根據用戶已經定義好的過濾過則對數據包進行逐一匹配,若匹配成功則放入內核緩沖區,并傳遞給用戶緩沖區,匹配失敗則直接丟棄。如果沒有設置過濾規則,所有的數據包都將放入內核緩沖區,并傳遞給用戶緩沖區。

pcap基本工作流程

(1)確定將要嗅探的接口,在linux下是類似eth0的東西。在BSD下是類似xll的東西。可以在一個字符串中聲明設備,也可以讓pcap提供備選接口(我們想要嗅探的接口)的名字。
(2)初始化pcap,此時才真正告訴pcap我們要嗅探的具體接口,只要我們愿意,我們可以嗅探多個接口。但是如何區分多個接口呢,使用文件句柄。就像讀寫文件時使用文件句柄一樣。我們必須給嗅探任務命名,以至于區分不同的嗅探任務。
(3)指定過濾規則,當我們只想嗅探特殊的流量時(例如,僅僅嗅探TCP/IP包、僅僅嗅探經過端口80的包,等等)我們必須設定一個規則集,“編譯”并應用它。這是一個三相的并且緊密聯系的過程,規則集存儲與字符串中,在“編譯”之后會轉換成pcap可以讀取的格式。“編譯過程”實際上是調用自定義的函數完成的,不涉及外部的函數。然后我們可以告訴pcap在我們想要過濾的任何任務上實施。
(4)抓包,最后,告訴pcap進入主要的執行循環中,在此階段,在接收到任何我們想要的包之前pcap將一直循環等待。在每次抓取到一個新的數據包時,它將調用另一個自定義的函數,我們可以在這個函數中肆意妄為,例如,解析數據包并顯示數據內容、保存到文件或者什么都不做等等。
當嗅探完美任務完成時,記得關掉任務。
下面是pcap工作流程圖(摘自官網)

用戶級API

1)獲取數據包捕獲描述字
函數名稱:pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char _ebuf)
函數功能:獲得用于捕獲網絡數據包的數據包捕獲描述字。
參數說明:device參數為指定打開的網絡設備名。snaplen參數定義捕獲數據的最大字節數。Promisc 指定是否將網絡接口置于混雜模式。to_ms參數指_定超時時間(毫秒)。ebuf參數則僅在pcap_open_live()函數出錯返回NULL時用于傳遞錯誤消息。

2)打開保存捕獲數據包文件
函數名稱:pcap_t *pcap_open_offline(char *fname, char *ebuf)
函數功能:打開以前保存捕獲數據包的文件,用于讀取。
參數說明:fname參數指定打開的文件名。該文件中的數據格式與tcpdump和tcpslice兼容。”-“為標準輸入。ebuf參數則僅在pcap_open_offline()函數出錯返回NULL時用于傳遞錯誤消息。

**3)轉儲數據包
函數名稱:pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)
函數功能:打開用于保存捕獲數據包的文件,用于寫入。
參數說明:fname參數為”-“時表示標準輸出。出錯時返回NULL。p參數為調用pcap_open_offline() 或pcap_open_live()函數后返回的pcap結構指針,即網卡句柄。fname參數指定打開的文件名,存盤的文件名。如果返回NULL,則可調用pcap_geterr()函數獲取錯誤消息。

4)查找網絡設備
函數名稱:char *pcap_lookupdev(char *errbuf)
函數功能:用于返回可被pcap_open_live()或pcap_lookupnet()函數調用的網絡設備名指針。
返回值:如果函數出錯,則返回NULL,同時errbuf中存放相關的錯誤消息。

5)獲取網絡號和掩碼

函數名稱:int pcap_lookupnet(char *device, bpf_u_int32 *netp,bpf_u_int32 *maskp, char *errbuf)
函數功能:獲得指定網絡設備的網絡號和掩碼。
參數說明:netp參數和maskp參數都是bpf_u_int32指針。
**返回值:**如果函數出錯,則返回-1,同時errbuf中存放相關的錯誤消息。

6)捕獲并處理數據包
** 函數名稱**:int pcap_dispatch(pcap_t *p, int cnt,pcap_handler callback, u_char *user)
函數功能:捕獲并處理數據包。
參數說明:cnt參數指定函數返回前所處理數據包的最大值。cnt= -1表示在一個緩沖區中處理所有的數據包。cnt=0表示處理所有數據包,直到產生以下錯誤之一:讀取到EOF;超時讀取。callback參數指定一個帶有三個參數的回調函數,這三個參數為:一個從pcap_dispatch()函數傳遞過來的u_char指針,一個pcap_pkthdr結構的指針,和一個數據包大小的u_char指針。
返回值:如果成功則返回讀取到的字節數。讀取到EOF時則返回零值。出錯時則返回-1,此時可調用pcap_perror()或pcap_geterr()函數獲取錯誤消息。

7)捕獲和處理數據包
函數名稱:int pcap_loop(pcap_t *p, int cnt,pcap_handler callback, u_char *user)
函數功能:功能基本與pcap_dispatch()函數相同,只不過此函數在cnt個數據包被處理或出現錯誤時才返回,但讀取超時不會返回。而如果為pcap_open_live()函數指定了一個非零值的超時設置,然后調用pcap_dispatch()函數,則當超時發生時pcap_dispatch()函數會返回。cnt參數為負值時pcap_loop()函數將始終循環運行,除非出現錯誤。

8)輸出數據包
函數名稱:void pcap_dump(u_char *user, struct pcap_pkthdr *h,u_char *sp)
函數功能:向調用pcap_dump_open()函數打開的文件輸出一個數據包。該函數可作為pcap_dispatch()函數的回調函數。

參數說明: 參數1: 所建立的文件pcap_dump_open()的返回值,要進行強制轉換.;參數2: 數據包特有的內容.;參數 3: 數據包內容指針

9)編譯字串至過濾程序
函數名稱:int pcap_compile(pcap_t *p, struct bpf_program *fp,char *str, int optimize, bpf_u_int32 netmask)
函數功能:將str參數指定的字符串編譯到過濾程序中。
參數說明

  • p pcap_t類型句柄
  • fp是一個bpf_program結構的指針,在pcap_compile()函數中被賦值。
  • str是過濾表達式
  • optimize 表示是否需要優化過濾表達式。
  • netmask參數指定本地網絡的網絡掩碼。

10)指定過濾程序
函數名稱:int pcap_setfilter(pcap_t p, struct bpf_program fp)
函數功能:指定一個過濾程序。
**參數說明:**fp參數是bpf_program結構指針,通常取自pcap_compile()函數調用。
** 返回值:出錯時返回-1;成功時返回0

11)獲取下一個數據包
函數名稱:u_char pcap_next(pcap_t p, struct pcap_pkthdr *h)
** 函數功能:返回指向下一個數據包的u_char指針

12)獲取數據鏈路層類型
**函數名稱:*int pcap_datalink(pcap_t p)
** 函數功能:返回數據鏈路層類型,例如DLT_EN10MB

13)獲取快照參數值
函數名稱:int pcap_snapshot(pcap_t p)
** 函數功能*:返回pcap_open_live被調用后的snapshot參數值

14)檢測字節順序
函數名稱:int pcap_is_swapped(pcap_t *p)
**函數功能:**返回當前系統主機字節與被打開文件的字節順序是否不同

15)獲取主版本號
** 函數名稱**:int pcap_major_version(pcap_t *p)
函數功能:返回寫入被打開文件所使用的pcap函數的主版本號

16)獲取輔版本號
函數名稱:int pcap_minor_version(pcap_t p)
** 函數功能*:返回寫入被打開文件所使用的pcap函數的輔版本號

17)結構賦值
函數名稱:int pcap_stats(pcap_t *p, struct pcap_stat *ps)
函數功能:向pcap_stat結構賦值。成功時返回0。這些數值包括了從開始捕獲數據以來至今共捕獲到的數據包統計。如果出錯或不支持數據包統計,則返回-1,且可調用pcap_perror()或pcap_geterr()函數來獲取錯誤消息。

18)獲取打開文件名
函數名稱:FILE *pcap_file(pcap_t *p)
函數功能:返回被打開文件的文件名。

19)獲取描述字號碼
函數名稱:int pcap_fileno(pcap_t *p)
函數功能:返回被打開文件的文件描述字號碼

20)顯示錯誤消息
函數名稱:void pcap_perror(pcap_t *p, char *prefix)
函數功能:在標準輸出設備上顯示最后一個pcap庫錯誤消息。以prefix參數指定的字符串為消息頭。示最后一個pcap庫錯誤消息。以prefix參數指定的字符串為消息頭。

21)用來關閉pcap_dump_open打開的文件
函數名稱:void pcap_dump_close(pcap_dumper_t *p);
函數功能:用來關閉pcap_dump_open打開的文件,入參是pcap_dump_open返回的指針;

21)刷新緩沖區
函數名稱:int pcap_dump_flush(pcap_dumper_t *p)
函數功能:刷新緩沖區,把捕獲的數據包從緩沖區真正拷貝到文件;

example

main.c

#include <stdio.h> #include "pcaptest.h"/* 我盡量讓每一個例子都完全獨立,在一個到兩個函數之間完成 而不是去封裝重復的內容,這樣做在實際開發中肯定是沒有好處的, 唯一的好處是 在觀看例子的時候 我不需要去理解函數的調用關系,因為基本上就一到兩個函數直接調用。 所以哪怕重復 我也不做修改,反而可能會刻意重復。 參考鏈接 https://www.devdungeon.com/content/using-libpcap-c 這個鏈接教程非常棒 */int main() {//getHostDeviceInfo();//openNetDev(NULL);//testCapNext();//testCaploop();//testCapAndSaveFile();//testOpenCapFile();//testSetFilter();//testParseEtherData();//testParseIPData();testParseTCPData();return 0; }

pcaptest.h

#ifndef PCAPTEST_H #define PCAPTEST_H//獲取本地網卡設備信息 void getHostDeviceInfo(void);//打開網卡并獲取屬性 void testOpenDev(char*network);//測試捕獲數據 next方式 void testCapNext(void);//測試捕獲方式 loop方式 void testCaploop(void);//設置過濾 void testSetFilter(void);//測試捕獲數據保存為文件 void testCapAndSaveFile(void);//測試打開捕獲文件并解析 void testOpenCapFile(void);//解析以太網鏈路層 void testParseEtherData(void); //解析ip層 void testParseIPData(void); //解析tcp void testParseTCPData(void);#endif // PCAPTEST_H

pcaptest.c

#include "pcaptest.h" #include <pcap.h> #include <arpa/inet.h> #include <stdlib.h> #include <netinet/in.h> #include <netinet/if_ether.h>//ip地址轉換示例 void TestIpv6() {char ipv6_addr[64];//內嵌 IPv4 地址的 IPv6 地址//該函數將字符串 src 轉換為 af 地址族中的網絡地址結構,然后將該網絡地址結構復制到 dst。af 參數必須是 AF_INET 或 AF_INET6。//inet_pton() 成功時返回 1(網絡地址已成功轉換)。如果 src 不包含表示指定地址族中有效網絡地址的字符串,則返回 0。//如果 af 不包含有效的地址族,則返回 -1 并將 errno 設置為 EAFNOSUPPORT。inet_pton(AF_INET6, "0:0:0:0:0:0:192.168.200.65", ipv6_addr);printf("%s\n", ipv6_addr);char ipv6_str[64] = {'\0'};//該函數將af地址族中的網絡地址結構src轉換為字符串。結果字符串被復制到 dst 指向的緩沖區,該緩沖區必須是一個非 NULL 指針。調用者在參數大小中指定此緩沖區中可用的字節數。//成功時,inet_ntop() 返回一個指向 dst 的非 NULL 指針。如果發生錯誤,則返回 NULL,并設置 errno 以指示錯誤。inet_ntop(AF_INET6, ipv6_addr, ipv6_str, 64);printf("%s\n", ipv6_str); }void TestIpv4() {int ipv4_addr;inet_pton(AF_INET, "192.168.200.65", &ipv4_addr);printf("%d\n", ipv4_addr);char ipv4_str[64] = {'\0'};inet_ntop(AF_INET, &ipv4_addr, ipv4_str, 64);printf("%s\n", ipv4_str); } /*******************************************內部調用**************************************************/ // 解析鏈路層 ip TCP void printPKInfo(const struct pcap_pkthdr *header, const u_char *packet){printf("數據包捕獲時間: %s", ctime(&header->ts.tv_sec));printf("數據包捕獲長度: %d\n", header->caplen);printf("數據包長度 %d\n", header->len);for (int i = 0; i < header->caplen; ++i) {if (i % 8 == 0 && i > 7)printf("\n");printf("%x\t", packet[i]);}printf("\n");struct ether_header *eth_header = (struct ether_header *) packet;if (ntohs(eth_header->ether_type) != ETHERTYPE_IP) {return;}/* Pointers to start point of various headers */const u_char *ip_header;const u_char *tcp_header;const u_char *payload;/* Header lengths in bytes */const int ethernet_header_length = 14; /* Doesn't change *//* Find start of IP header */ip_header = packet + ethernet_header_length;//ip層前8個位分別四位版本 四位長度int ip_header_length = ((*ip_header) & 0x0F);//首部長度的記錄都是按照4個字節的單位進行增減的,所以我們算出4bit的首部長度的值之后,乘以4個字節,就可以知道首部的長度了,一個字節代表了8bitip_header_length = ip_header_length * 4;printf("IP 頭長度: %d\n", ip_header_length);//獲取協議層u_char protocol = *(ip_header + 9);if (protocol != IPPROTO_TCP) {printf("Not a TCP packet. Skipping...\n\n");return;}//獲取ip地址int src, dest;memcpy(&src, ip_header + 12, 4);memcpy(&dest, ip_header + 16, 4);char ipv4_str[64] = {'\0'};inet_ntop(AF_INET, &src, ipv4_str, 64);printf("源IP:%s\n", ipv4_str);char ipv4_dest[64] = {'\0'};inet_ntop(AF_INET, &dest, ipv4_dest, 64);printf("目標IP:%s\n", ipv4_dest);//tcp頭開始位置tcp_header = packet + ethernet_header_length + ip_header_length;uint16_t srcport1, srcport2,destport1,destport2;memcpy(&srcport1, tcp_header , 2);memcpy(&destport1, tcp_header+ 2, 2);srcport2 = ntohs(srcport1);destport2 = ntohs(destport1);printf("srcPort:%d\n",srcport2);printf("destport:%d\n",destport2);//tcp長度 tcp首部偏移12字節后 前四位為長度int tcp_header_length = ((*(tcp_header + 12)) & 0xF0) >> 4;tcp_header_length = tcp_header_length * 4;printf("TCP 頭長度: %d\n", tcp_header_length);/* 協議頭總大小 */int total_headers_size = ethernet_header_length + ip_header_length + tcp_header_length;printf("所有協議頭總長度: %d bytes\n", total_headers_size);//數據長度int payload_length = header->caplen - (ethernet_header_length + ip_header_length + tcp_header_length);printf("有效數據長度: %d bytes\n", payload_length);//數據頭payload = packet + total_headers_size;printf("有效數據內存地址: %p\n", payload);printf("有效數據:[\t");if (payload_length > 0) {const u_char *temp_pointer = payload;int byte_count = 0;while (byte_count++ < payload_length) {printf("%c", *temp_pointer);temp_pointer++;}}printf("]\n\n"); }//回調函數 loop回調用 void my_loop(u_char *args,const struct pcap_pkthdr *header,const u_char *packet){printPKInfo(header,packet);return }//回調函數 保存文件回調 void processPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet) {/*void pcap_dump(u_char *user, struct pcap_pkthdr *h,u_char *sp)向調用pcap_dump_open()函數打開的文件輸出一個數據包。該函數可作為pcap_dispatch()函數的回調函數。*/pcap_dump(arg, pkthdr, packet);printf("Received Packet Size: %d\n", pkthdr->len);return; }//解析數據 void testParseData(pcap_handler func) {char error_buffer[PCAP_ERRBUF_SIZE];char *device = pcap_lookupdev(error_buffer); //獲取第一個可以捕獲的設備if (device == NULL) {printf("錯誤 未找到設備: %s\n", error_buffer);return ;}/* 打開網絡接口 */pcap_t *handle = pcap_open_live(device,//設備名稱BUFSIZ,//抓取個數 最大不超過655351, //混合模式10000, //超時時間error_buffer);struct bpf_program filter;char filter_exp[] = "port 3306";if (pcap_compile(handle, &filter, filter_exp, 0, 0) == -1) {printf("Bad filter - %s\n", pcap_geterr(handle));return ;}if (pcap_setfilter(handle, &filter) == -1) {printf("Error setting filter - %s\n", pcap_geterr(handle));return ;}pcap_loop(handle, 20, func, NULL);pcap_close(handle);return ; }//回調函數 解析鏈路層 void my_parseEth(u_char *args,const struct pcap_pkthdr *header,const u_char *packet ) {// 數據包肯定是大于ether_ header結構,// 但我們只想看看數據包標頭的第一部分。我們強制編譯器將指向數據包的指針視為ether_ header指針結構。// 數據包的數據有效載荷到達在標題之后。不同的數據包類型具有不同的報頭長度,但以太網報頭始終相同(14字節)IP層則為20字節(但存在可變長度,不過一般不會有)// struct ether_header// {// uint8_t ether_dhost[ETH_ALEN]; /* destination eth addr */// uint8_t ether_shost[ETH_ALEN]; /* source ether addr */// uint16_t ether_type; /* packet type ID field */// } __attribute__((__packed__));struct ether_header *eth_header = (struct ether_header *) packet;if (ntohs(eth_header->ether_type) != ETHERTYPE_IP) {printf("Not an IP packet. Skipping...\n\n");return;}printf("Total packet available: %d bytes\n", header->caplen);printf("Expected packet size: %d bytes\n", header->len);if (ntohs(eth_header->ether_type) == ETHERTYPE_IP) {printf("IP\n");} else if (ntohs(eth_header->ether_type) == ETHERTYPE_ARP) {printf("ARP\n");} else if (ntohs(eth_header->ether_type) == ETHERTYPE_REVARP) {printf("Reverse ARP\n");} }//回調函數 解析IP void my_parseIP(u_char *args,const struct pcap_pkthdr *header,const u_char *packet ) {/* 鏈路層長度 */int ethernet_header_length = 14; /* 不要修改 鏈路層固定為14字節 */struct ether_header *eth_header = (struct ether_header *) packet;if (ntohs(eth_header->ether_type) != ETHERTYPE_IP) {printf("Not an IP packet. Skipping...\n\n");return;}/* ip層指針 */const u_char *ip_header;/*ip頭開頭 包頭+14(鏈路層長度)*/ip_header = packet + ethernet_header_length;//ip層長度 可變 一般為20字節 ip層前8個位分別四位版本 四位長度int ip_header_length = ((*ip_header) & 0x0F);//首部長度的記錄都是按照4個字節的單位進行增減的,所以我們算出4bit的首部長度的值之后,乘以4個字節,就可以知道首部的長度了,一個字節代表了8bitip_header_length = ip_header_length * 4;printf("IP header length (IHL) in bytes: %d\n", ip_header_length);//獲取協議層u_char protocol = *(ip_header + 9);if (protocol != IPPROTO_TCP) {printf("Not a TCP packet. Skipping...\n\n");return;}//獲取ip地址int src, dest;memcpy(&src, ip_header + 12, 4);memcpy(&dest, ip_header + 16, 4);char ipv4_str[64] = {'\0'};inet_ntop(AF_INET, &src, ipv4_str, 64);printf("%s\n", ipv4_str);char ipv4_dest[64] = {'\0'};inet_ntop(AF_INET, &dest, ipv4_dest, 64);printf("%s\n", ipv4_dest); }/*******************************************外部調用**************************************************/ //獲取本地網卡設備信息 void getHostDeviceInfo() {//interface結構體pcap_if_t *devlist, *curr;//網絡地址類pcap_addr_t *addr;char errbuf[PCAP_ERRBUF_SIZE];//查找所有設備if (pcap_findalldevs(&devlist, errbuf)) {printf("pcap: %s\n", errbuf);return ;}//遍歷設備for (curr = devlist; curr; curr = curr->next) {for (addr = curr->addresses; addr; addr = addr->next) {struct sockaddr *realaddr;if (addr->addr)realaddr = addr->addr;else if (addr->dstaddr)realaddr = addr->dstaddr;elsecontinue;//ipv4或ipv6if (realaddr->sa_family == AF_INET || realaddr->sa_family == AF_INET6) {//打印屬性struct sockaddr_in *sin = (struct sockaddr_in *) realaddr;if (sin->sin_addr.s_addr) {printf("dev_name: %s\t desc:%s\t flags:%d\t ip:%s\n", curr->name,curr->description, curr->flags, inet_ntoa(sin->sin_addr));}}}}//釋放資源pcap_freealldevs(devlist); }void testOpenDev(char *network) {char *networkIF = NULL;char errbuf[PCAP_ERRBUF_SIZE];//獲取第一個合適的網絡接口的字符串指針if (network != NULL) {networkIF = network;} else {networkIF = pcap_lookupdev(errbuf);}if (networkIF == NULL) {printf("err:%s\n", errbuf);return ;}printf("interName : %s\n", networkIF);//打開網絡接口/*pcap_t * pcap_open_live(const char * device, int snaplen, int promisc, int to_ms, char * errbuf)device : 網絡接口字符串,可以直接使用硬編碼。snaplen: 對于每個數據包,從開頭要抓多少個字節,我們可以設置這個值來只抓每個數據包的頭部,而不關心具體的內容。典型的以太網幀長度是1518字節,但其他的某些協議的數據包會更長一點,但任何一個協議的一個數據包長度都必然小于65535個字節。promisc: 指定是否打開混雜模式(Promiscuous Mode),0表示非混雜模式,任何其他值表示混合模式。如果要打開混雜模式,那么網卡必須也要打開混雜模式,可以使用如下的命令打開eth0混雜模式:ifconfig eth0 promiscto_ms: 指定需要等待的毫秒數,超過這個數值后就會立即返回。0表示一直等待直到有數據包到來。errbuf: 存放出錯信息的數組。*/pcap_t *pcap = pcap_open_live(networkIF, 65535, 0, 0, errbuf);if (pcap == NULL) {printf("err:%s\n", errbuf);return ;}/*int pcap_lookupnet(char *device, bpf_u_int32 * netp, bpf_u_int32 * maskp, char *errbuf);功能:獲得指定網絡設備的網絡號和掩碼函數:device: 網絡設備名netp: 存放網絡號的指針maskp: 存放掩碼的指針errbuf: 存放出錯信息返回值:成功:0,失敗: -1*/bpf_u_int32 buf, mask;if (pcap_lookupnet(networkIF, &buf, &mask, errbuf) != 0) {printf("err:%s\n", errbuf);return ;}char ipaddr[64] = {'\0'};//獲取本地ip地址方式未找到 暫時先使用如下方式{//interface結構體pcap_if_t *devlist, *curr;//網絡地址類pcap_addr_t *addr;char errbuf[PCAP_ERRBUF_SIZE];//查找所有設備if (pcap_findalldevs(&devlist, errbuf)) {printf("pcap: %s\n", errbuf);return ;}//遍歷設備for (curr = devlist; curr; curr = curr->next) {for (addr = curr->addresses; addr; addr = addr->next) {struct sockaddr *realaddr;if (addr->addr)realaddr = addr->addr;else if (addr->dstaddr)realaddr = addr->dstaddr;elsecontinue;//ipv4或ipv6if (realaddr->sa_family == AF_INET || realaddr->sa_family == AF_INET6) {//拷貝struct sockaddr_in *sin = (struct sockaddr_in *) realaddr;if (sin->sin_addr.s_addr && !strcmp(curr->name, networkIF)) {strcpy(ipaddr, inet_ntoa(sin->sin_addr));break;}}}}//釋放資源pcap_freealldevs(devlist);}printf("ipAddr:%s\n", ipaddr);char ipv4_str[64] = {'\0'};inet_ntop(AF_INET, &buf, ipv4_str, 64);printf("網絡號: %s\n", ipv4_str);inet_ntop(AF_INET, &mask, ipv4_str, 64);printf("mask掩碼: %s\n", ipv4_str);/*struct pcap_pkthdr{struct timeval ts; // 抓到包的時間bpf_u_int32 caplen; // 表示抓到的數據長度bpf_u_int32 len; // 表示數據包的實際長度}成功返回捕獲數據包的地址,失敗返回 NULL*/struct pcap_pkthdr pkthdr;pcap_next(pcap, &pkthdr);printf("數據包捕獲時間: %s", ctime(&pkthdr.ts.tv_sec));printf("數據包捕獲長度: %d\n", pkthdr.caplen);printf("數據包長度 %d\n", pkthdr.len);/*struct pcap_stat {u_int ps_recv; // number of packets receivedu_int ps_drop; // number of packets droppedu_int ps_ifdrop; // drops by interface -- only supported on some platforms};*/struct pcap_stat stat;pcap_stats(pcap, &stat);printf("recv: %d\t drop: %d\t ifdrop: %d\n", stat.ps_recv, stat.ps_drop, stat.ps_ifdrop);//關閉網絡接口/* 在操作為網絡接口后,我們應該要釋放它:void pcap_close(pcap_t * p)該函數用于關閉pcap_open_live()獲取的pcap_t的網絡接口對象并釋放相關資源。*/pcap_close(pcap); }void testCapNext() {char error_buffer[PCAP_ERRBUF_SIZE];char *device = pcap_lookupdev(error_buffer); //獲取第一個可以捕獲的設備if (device == NULL) {printf("錯誤 未找到設備: %s\n", error_buffer);return ;}/* 打開網絡接口 */pcap_t *handle = pcap_open_live(device,//設備名稱BUFSIZ,//抓取個數 最大不超過655351, //混合模式10000, //超時時間error_buffer);/*獲取下一個數據包u_char _pcap_next(pcap_t _p, struct pcap_pkthdr *h)返回指向下一個數據包的u_char指針*/struct pcap_pkthdr packet_header;const u_char *packet = pcap_next(handle, &packet_header);if (packet == NULL) {printf("沒有抓取到包\n");return ;}printPKInfo(&packet_header,packet);pcap_close(handle); }void testCaploop() {char error_buffer[PCAP_ERRBUF_SIZE];char *device = pcap_lookupdev(error_buffer); //獲取第一個可以捕獲的設備if (device == NULL) {printf("錯誤 未找到設備: %s\n", error_buffer);return ;}/* 打開網絡接口 */pcap_t *handle = pcap_open_live(device,//設備名稱BUFSIZ,//抓取個數 最大不超過655351, //混合模式10000, //超時時間error_buffer);/*int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)p:需要捕獲的設備cnt:捕獲的包個數 0 代表一直捕獲callback:回調函數 原型如下user: 回調函數的參數typedef void (*pcap_handler)(u_char *args, const struct pcap_pkthdr *header,const u_char *packet);args: 回調函數傳遞的參數 userheader: 捕獲包信息packet: 數據包*/pcap_loop(handle, 0, my_loop, NULL);pcap_close(handle);return ; }void testSetFilter() {char error_buffer[PCAP_ERRBUF_SIZE];char *device = pcap_lookupdev(error_buffer); //獲取第一個可以捕獲的設備if (device == NULL) {printf("錯誤 未找到設備: %s\n", error_buffer);return ;}/* 打開網絡接口 */pcap_t *handle = pcap_open_live(device,//設備名稱BUFSIZ,//抓取個數 最大不超過655351, //混合模式10000, //超時時間error_buffer);//設置過濾struct bpf_program filter;char filter_exp[] = "port 80";//將過濾字符串放入bpf_program結構體if (pcap_compile(handle, &filter, filter_exp, 0, 0) == -1) {printf("Bad filter - %s\n", pcap_geterr(handle));return ;}//設置過濾if (pcap_setfilter(handle, &filter) == -1) {printf("Error setting filter - %s\n", pcap_geterr(handle));return ;}/*捕獲數據包*/pcap_loop(handle, 0, my_loop, NULL);pcap_close(handle); }void testCapAndSaveFile() {char error_buffer[PCAP_ERRBUF_SIZE];char *device = pcap_lookupdev(error_buffer); //獲取第一個可以捕獲的設備if (device == NULL) {printf("錯誤 未找到設備: %s\n", error_buffer);return ;}/* 打開網絡接口 */pcap_t *handle = pcap_open_live(device,//設備名稱BUFSIZ,//抓取個數 最大不超過655351, //混合模式10000, //超時時間error_buffer);/*打開需要寫入的文件*/pcap_dumper_t *out_pcap = pcap_dump_open(handle, "mysql_test.pcapng");/*捕獲數據包并且寫入文件*/pcap_loop(handle, 20, processPacket, (u_char *)out_pcap);/*刷新*/pcap_dump_flush(out_pcap);//關閉文件pcap_dump_close(out_pcap);pcap_close(handle); }void testOpenCapFile() {char error_buffer[PCAP_ERRBUF_SIZE];pcap_t *handle = pcap_open_offline("mysql_test.pcapng", error_buffer);struct bpf_program filter;char filter_exp[] = "tcp dst port 3306";if (pcap_compile(handle, &filter, filter_exp, 0, 0) == -1) {printf("Bad filter - %s\n", pcap_geterr(handle));return ;}if (pcap_setfilter(handle, &filter) == -1) {printf("Error setting filter - %s\n", pcap_geterr(handle));return ;}pcap_loop(handle, 0, my_loop, NULL); }void testParseEtherData() {testParseData(my_parseEth); }void testParseIPData() {testParseData(my_parseIP); }void testParseTCPData() {testParseData(my_loop); }

參考鏈接

【數據包捕獲技術】libpcap原理

Linux下網絡數據包捕獲-Libpcap

libpcap api接口及詳細教程

Linux網絡編程——原始套接字編程

Linux下使用libpcap進行網絡抓包并保存到文件

c語言 libpcap示例

tcpdump官網

總結

以上是生活随笔為你收集整理的libpcap使用整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

99久久激情 | 天天天操天天天干 | 色偷偷88888欧美精品久久 | 99色国产| 久久国产精品一国产精品 | 超碰97国产 | 黄色免费高清视频 | 久久超 | 福利av影院 | 美女网站一区 | 中文字幕在线成人 | 欧美一级视频一区 | 91成人看片| 日韩亚洲在线视频 | 香蕉视频国产在线 | 色视频网址 | av看片在线 | 91av视频网| 在线观看国产 | 成人宗合网 | 在线免费黄色av | 国产一区二区三区黄 | 黄色日批网站 | av中文字幕在线播放 | 在线看一区二区 | 国产亚洲视频在线免费观看 | 欧美色综合 | 国产在线黄色 | 91精品在线麻豆 | 色网站免费在线观看 | 欧美成人日韩 | 97碰碰精品嫩模在线播放 | 国产一级在线播放 | 四虎国产精品永久在线国在线 | 亚洲精品一区二区三区新线路 | 精品夜夜嗨av一区二区三区 | 激情网综合 | 高清视频一区 | 日韩中文字幕在线不卡 | 丁香久久久 | 国产免费区 | 久久久久久网站 | 天天天天爱天天躁 | 91黄站| 91福利在线导航 | 中文成人字幕 | 国产午夜精品一区 | 国产色影院 | 国内精品视频一区二区三区八戒 | 免费成人av在线看 | 天天操天天干天天操天天干 | 黄色看片 | 少妇bbb搡bbbb搡bbbb′ | 午夜黄色大片 | 国产亚洲欧美精品久久久久久 | 久久精品视频网址 | 欧美成人a在线 | 三级av免费观看 | 激情www| 亚洲激情影院 | 99免费看片 | 天天干夜夜夜 | 亚洲精品欧美精品 | 五月天丁香 | 亚洲美女免费精品视频在线观看 | 91福利社区在线观看 | 久9在线 | 97爱| www.com黄色 | 欧美午夜久久久 | 亚洲日韩精品欧美一区二区 | 成人av在线观 | 国产精品大片 | 一级α片 | 国产精品一区二区av麻豆 | 欧美91视频| 97人人射| 日本丰满少妇免费一区 | 久久免费国产电影 | 超碰在线日本 | 欧美色插 | 婷婷六月久久 | 高潮毛片无遮挡高清免费 | 欧美一区二区在线免费看 | 色综合亚洲精品激情狠狠 | 国产精品女教师 | 91视频免费网址 | 天天天天天天操 | 国产资源网站 | 久久香蕉电影 | 99人久久精品视频最新地址 | 涩涩伊人 | 国产精品综合久久久久 | 成人黄色小说视频 | 国产精品美女久久久免费 | 在线免费看黄色 | 国产免费嫩草影院 | 91精品免费视频 | 久久久精品欧美一区二区免费 | 亚洲aⅴ一区二区三区 | 日韩精品电影在线播放 | 免费一级黄色 | 亚洲精品国产自产拍在线观看 | 免费在线观看午夜视频 | 99c视频在线 | 色网址99| 亚洲九九九在线观看 | 在线a人v观看视频 | 国产成人精品久久久 | 日日夜夜精品视频天天综合网 | 国产情侣一区 | 日韩天堂在线观看 | 精品视频123区在线观看 | 黄色免费网战 | 日日日天天天 | 国产精品一区二区电影 | 一区在线电影 | 国产日韩视频在线 | 毛片一区二区 | 国产成人三级三级三级97 | 国产精品久久久久久久久搜平片 | 二区精品视频 | 亚洲精品高清视频在线观看 | 亚洲传媒在线 | 日本在线观看视频一区 | 国产精品一区二区免费 | 久久精品网 | 久久爱资源网 | 欧美性久久久久久 | 久久尤物电影视频在线观看 | 色网站黄| 黄色三级免费片 | 99一级片| 亚洲午夜精品电影 | 成人国产精品入口 | 精品在线观看一区二区 | 五月天电影免费在线观看一区 | 西西4444www大胆无视频 | 丝袜美女视频网站 | 91久草视频 | 国产精品久久久久av | 91在线免费播放视频 | 婷婷色在线| 激情久久综合 | 久久久久久久久久免费 | www.国产在线观看 | 色综合久久久久综合体 | 日本中文一区二区 | 久久视频这里有精品 | 人人插人人做 | 久久理论电影网 | 久草97| 国产亚洲精品久久久久久久久久 | 九精品 | 蜜臀av性久久久久蜜臀av | 免费黄色av. | 成人免费观看视频大全 | 91高清不卡 | 久久久久免费网 | 国产99久久久精品 | 日本mv大片欧洲mv大片 | 久草在线精品观看 | 国产精品久久久久久久久久ktv | 99热国内精品 | 久草精品视频在线播放 | 久久久999精品视频 国产美女免费观看 | 国产区在线 | 五月婷婷播播 | wwwwwww黄| av黄色一级片 | 伊人官网 | 国产精品一区二区三区免费视频 | 天天操天天摸天天爽 | 中文字幕国产精品 | 国产精品午夜久久 | 超碰97人人爱 | 99精品视频在线看 | 最近中文字幕完整视频高清1 | 91九色国产蝌蚪 | 日韩av进入| 欧美韩国日本在线观看 | 久久免费精彩视频 | 国产精品久久久久久久久毛片 | 亚洲精品高清视频在线观看 | 在线中文字幕观看 | 国产精品在线看 | 四虎成人精品永久免费av | 久草免费在线视频观看 | 国产麻豆精品免费视频 | 久久精品欧美一区 | 成人精品影视 | 免费av在| 91麻豆精品国产91久久久久久久久 | 天天视频亚洲 | 亚洲每日更新 | 性日韩欧美在线视频 | av短片在线 | 成人午夜影视 | 黄色美女免费网站 | 91亚洲精品国偷拍 | 99久久久国产免费 | 91重口视频| 天天操操操操操操 | 国产精品久久久区三区天天噜 | 久草久草在线 | 狠狠操操网| 国产精品久久网站 | 国产午夜小视频 | 亚洲欧洲在线视频 | 亚洲韩国一区二区三区 | 久久久色 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 国产精品亚洲精品 | 国产电影黄色av | 精品国产99 | 欧美日韩国产二区 | 国产一级片在线播放 | 夜色在线资源 | 国产成人99久久亚洲综合精品 | 亚洲成人资源 | 国产精品国产三级国产aⅴ入口 | 日韩精品欧美一区 | 日本大片免费观看在线 | 久久久国产高清 | 精品国产a | 欧美日韩色婷婷 | 综合中文字幕 | a在线v| 久久只精品99品免费久23小说 | 成av人电影 | 99视频在线观看一区三区 | 日韩av资源在线观看 | 成人黄色小视频 | 99久久国产免费免费 | 丁香网婷婷 | 中文字幕丰满人伦在线 | 中文字幕在线观看资源 | 久久99热久久99精品 | 在线观看 亚洲 | 国产亚洲精品综合一区91 | 一区二区欧美日韩 | 日韩字幕在线观看 | 97视频在线观看网址 | 亚洲精品午夜aaa久久久 | 亚洲综合在线视频 | 天天干国产 | 三级黄色理论片 | 欧美色综合天天久久综合精品 | 免费av免费观看 | 国产尤物在线 | www.天天射| 日韩成人精品一区二区三区 | 亚洲一片黄 | 国产黄大片在线观看 | 免费无遮挡动漫网站 | 91在线免费播放 | 亚洲精品免费在线观看 | 最近中文字幕mv免费高清在线 | 毛片随便看 | 日本精品视频一区二区 | 97超碰人人在线 | 国产精品中文字幕av | 久久久久黄 | www.av免费观看 | 丁香五香天综合情 | 欧美日韩国产一区二区在线观看 | 中文字幕专区高清在线观看 | av在线播放亚洲 | 国产精品ssss在线亚洲 | 久久91网 | 久久99这里只有精品 | 四虎影视精品成人 | 日本久久精品 | 黄色av一级 | 日韩成人免费在线 | 狠狠色噜噜狠狠狠狠2021天天 | 久久综合色影院 | 91桃色在线观看视频 | 91日韩国产 | av午夜电影 | 国产一区在线观看免费 | 久久国产剧场电影 | 99精品毛片 | 亚洲天堂社区 | 国产精品嫩草55av | 久久综合欧美精品亚洲一区 | 日韩在线视频播放 | 人人澡人人爱 | 亚洲精品国产精品99久久 | 久久www免费视频 | 久久国产高清视频 | 久艹在线播放 | 国产传媒一区在线 | 三级免费黄色 | 久久人人做| 日日爱网址 | 国产特级毛片aaaaaa毛片 | 国产精品永久久久久久久www | 久久精品国产美女 | 国产成年人av| 国产在线国偷精品产拍免费yy | 精品国产一区二区三区久久 | 91热爆视频 | 精品在线观看一区二区 | 天堂av观看 | 成人在线观看免费视频 | 国产黄色片网站 | 精品一区二区综合 | 日韩国产高清在线 | 99久久精品免费看国产一区二区三区 | 国产免费三级在线观看 | 97av色| 国产一区二区精品久久 | 少妇做爰k8经典 | 精品欧美一区二区精品久久 | 久久久久久久久毛片精品 | 不卡的一区二区三区 | 亚洲免费视频观看 | 日韩精品中文字幕久久臀 | 98超碰在线观看 | 欧美日韩久久久 | 免费看一级黄色 | 在线成人小视频 | 欧美 另类 交 | 8x成人免费视频 | av色一区 | 亚洲电影影音先锋 | 国产精品高潮呻吟久久久久 | 亚洲天天在线日亚洲洲精 | 国产成人av一区二区三区在线观看 | 午夜久久久久 | 超碰99在线 | 日韩欧美黄色网址 | 欧美一二三区在线播放 | 国产一区播放 | 久久久免费毛片 | 一级一片免费视频 | 日韩在线三区 | 精品高清美女精品国产区 | 黄色国产大片 | 天天鲁一鲁摸一摸爽一爽 | 91新人在线观看 | 亚洲成人av免费 | 一区二区三区在线播放 | 国产精品美女在线观看 | 狠狠色噜噜狠狠狠合久 | 99国产视频在线 | 亚洲欧美在线视频免费 | 精品婷婷| 日韩中文字幕免费在线观看 | 岛国一区在线 | 久久高清av | 天天综合网在线 | av大片免费 | 久操久| 亚州免费视频 | 国产精品视频永久免费播放 | 日韩精品在线观看av | 精品国产自 | 免费观看一级成人毛片 | 视频在线99 | 欧美日韩中文另类 | av电影在线免费观看 | 国产在线视频一区 | 玖玖爱国产在线 | 久久久久久中文字幕 | 毛片网站在线看 | 国产分类视频 | 成人久久久电影 | 九九久久久久久久久激情 | 日日操夜 | 色欲综合视频天天天 | 97色se| 久久久久久久久爱 | 中文字幕永久在线 | 一区国产精品 | 日韩免费在线观看视频 | 精品国内自产拍在线观看视频 | 天天干天天做天天操 | 久久久久久久久久影视 | 成人欧美一区二区三区在线观看 | 日韩资源在线观看 | 国产免费观看视频 | 91亚洲影院 | 91午夜精品 | 亚洲国产精品久久久久久 | 久久久精品一区二区三区 | 美女视频永久黄网站免费观看国产 | 日本爱爱免费 | 最近日本字幕mv免费观看在线 | 在线观看视频免费大全 | 色婷在线| 99久久久成人国产精品 | 麻豆 videos | 日韩高清免费电影 | 婷婷亚洲综合五月天小说 | 国产小视频在线免费观看 | 色狠狠久久av五月综合 | 日韩在线视频免费观看 | 亚洲欧美日韩国产精品一区午夜 | a级一a一级在线观看 | 久久五月婷婷丁香 | 91精品一区二区三区蜜桃 | 黄色小网站在线 | 天天爱天天射天天干天天 | 香蕉视频91 | 天天色播| 色综合咪咪久久网 | 国产va精品免费观看 | 天天干人人干 | 午夜av日韩| 亚洲成人第一区 | 欧美日韩视频在线一区 | 色久综合 | 亚洲国产日韩在线 | 在线观看视频一区二区三区 | 青草视频免费观看 | 国产乱对白刺激视频不卡 | 日韩精品一区二区三区外面 | 五月香视频在线观看 | 久久久久久久久久久久久久av | 久久久久女人精品毛片九一 | 久久久久久久久毛片精品 | 久久好看免费视频 | www国产亚洲 | 一二三区在线 | a视频在线观看 | 国产日韩在线视频 | 91资源在线观看 | 九九九热精品免费视频观看网站 | 欧美国产视频在线 | 人人澡超碰碰 | 偷拍区另类综合在线 | 天天天操天天天干 | 人人干干人人 | 久久视频这里只有精品 | 99高清视频有精品视频 | 久久精品视频在线免费观看 | 夜夜爽天天爽 | 亚洲波多野结衣 | 国产精品久久电影观看 | 黄色在线免费观看网址 | 日韩高清网站 | 久久你懂的| 久色网| 久久久久久久av | 亚洲精品久久久久www | 免费观看一级特黄欧美大片 | 人人爱爱 | 亚洲一级片 | 久久天天躁狠狠躁夜夜不卡公司 | 亚洲一区二区三区毛片 | 中文字幕在| 久久99精品久久久久久 | 91视频在线网址 | 最近高清中文在线字幕在线观看 | 国产视频精品免费 | 国产精品视频线看 | 国产中文伊人 | 中文字幕一区二区在线观看 | 成人午夜影院在线观看 | 久久99国产精品免费网站 | 一区免费视频 | 狠狠色综合网站久久久久久久 | 国产第一页福利影院 | 国产v欧美 | 国产精品一区二区三区四区在线观看 | 三级av免费观看 | 免费又黄又爽视频 | 日日干网 | 久久成人免费视频 | 午夜精品久久久久久久99婷婷 | 精品视频中文字幕 | 俺要去色综合狠狠 | .国产精品成人自产拍在线观看6 | 97国产大学生情侣白嫩酒店 | www.久艹| 国产精品免费视频观看 | 国产伦精品一区二区三区在线 | 成年人免费看的视频 | 婷婷日日| 午夜视频在线观看一区二区 | 天天综合精品 | 人人爽影院 | 99精品热视频 | 国产精品永久久久久久久久久 | 蜜臀av性久久久久av蜜臀妖精 | 日本在线观看一区二区三区 | 日韩电影精品 | 亚洲欧美国产精品久久久久 | 久久久黄视频 | 久久精品美女视频 | 日本久久久影视 | 亚洲精品国产片 | 国产视频在线看 | 天天骚夜夜操 | 在线观看电影av | 久久国产精品99久久久久久老狼 | 激情久久久久久久久久久久久久久久 | 99精品在线直播 | 国产精品久久久久久久久蜜臀 | 一区二区三区中文字幕在线 | 五月婷婷激情综合 | 亚洲高清激情 | 中文字幕在线日 | 天天射夜夜爽 | 国产高清精 | 欧美日韩精品久久久 | 亚洲国产精品99久久久久久久久 | 欧美精品在线观看免费 | 在线精品观看 | 91漂亮少妇露脸在线播放 | 日日夜色 | 五月婷婷六月丁香 | 特级西西www44高清大胆图片 | 久久亚洲精品国产亚洲老地址 | 91丨九色丨蝌蚪丨老版 | 中文字幕在线播放一区 | 99国产精品久久久久老师 | 国产精品高潮久久av | 亚洲黄色app | 亚洲综合视频在线 | 在线成人av| 日韩精品在线视频 | 久色小说 | 亚洲一区二区精品 | 日韩网站在线播放 | 又紧又大又爽精品一区二区 | 色91在线视频 | 国产很黄很色的视频 | 久久麻豆精品 | 99久久精品国产一区二区三区 | 免费a级观看 | 精品国产精品国产偷麻豆 | 五月婷婷激情 | 五月婷婷天堂 | 久久黄色a级片 | 国产日女人 | 亚洲日韩欧美一区二区在线 | 91精品免费在线观看 | 精品免费久久久久久 | 成+人+色综合 | 在线视频一二区 | 九九免费在线观看视频 | 毛片基地黄久久久久久天堂 | 久久久久久久久久久久久国产精品 | 亚洲天堂在线观看完整版 | 狠狠精品 | 91精品国自产在线观看 | 日韩99热 | 九九交易行官网 | 手机成人在线 | 香蕉久久久久久av成人 | 亚洲国产成人精品电影在线观看 | 国产成人精品午夜在线播放 | 91精品在线播放 | 国产精品9999久久久久仙踪林 | 精品国产亚洲日本 | 日韩理论电影网 | 波多野结衣在线观看视频 | 91视频 - 114av | 日韩丝袜 | 国产一级电影 | 国产精品美女毛片真酒店 | 国产精久久久久久妇女av | 手机看片 | 日韩a在线看 | 欧美精品久久久久久久久久丰满 | 黄色小说视频在线 | 免费国产在线精品 | 91精品视频免费在线观看 | 国产一级电影 | 九色视频网 | 国产精品少妇 | 欧美一区二视频在线免费观看 | 久久成人国产精品一区二区 | 天天操天天舔天天干 | av三区在线 | 在线观看蜜桃视频 | 免费在线播放av电影 | 最近最新中文字幕 | 女人18毛片a级毛片一区二区 | 麻豆系列在线观看 | 欧美大片在线看免费观看 | 日韩理论影院 | 亚洲精品国 | 国产专区一 | 国产高清一区二区 | 综合成人在线 | 久草网在线观看 | 国产日韩在线观看一区 | 黄色网免费 | 精品人妖videos欧美人妖 | 久久一区二区三区超碰国产精品 | 美女黄频在线观看 | 国产网站在线免费观看 | 欧美日韩激情视频8区 | 欧美成人h版在线观看 | 99se视频在线观看 | 草久久av| 中文字幕在线观看亚洲 | 美国人与动物xxxx | 国产一区二区高清 | 爱干视频| 啪啪凸凸 | 亚洲不卡av一区二区三区 | 一级一片免费观看 | 日韩欧美观看 | 精品国模一区二区三区 | 久久综合福利 | 日本最新一区二区三区 | 亚州精品成人 | 日本公妇在线观看 | 久久久网址 | 亚洲1级片| 国产九九九精品视频 | 麻豆首页 | 欧美综合在线视频 | 激情在线五月天 | 五月婷婷丁香在线观看 | 成人久久久久久久久久 | 一区二区三区国产精品 | 国产一区二区三区免费在线观看 | 国产黄色av | 欧美日韩一区二区三区免费视频 | 青春草免费在线视频 | 91精品蜜桃 | 99精品热 | 国产精品24小时在线观看 | 国产大尺度视频 | 人人讲 | 99视频精品全部免费 在线 | 国产在线欧美在线 | 欧美aa一级| 免费看成人av| 成人xxxx | 99精品视频免费在线观看 | 国产99久久久久 | 亚洲在线a | 国产色综合天天综合网 | 中文字幕电影高清在线观看 | 久久永久免费 | 亚洲国产日韩av | 中文字幕在线视频精品 | 国产一级电影在线 | 成人在线免费看视频 | 日韩精品免费一线在线观看 | 色综合久久66| 色婷婷综合久久久中文字幕 | 欧美精品乱码久久久久久 | 丝袜+亚洲+另类+欧美+变态 | 国产精品美女视频 | 久久久久久久久久久综合 | 亚洲欧美国产精品18p | 日日干夜夜草 | 久久久首页 | 亚洲免费成人av电影 | 国产一区观看 | 伊人婷婷 | 国产美女网站在线观看 | 久草在线免费电影 | 六月丁香在线视频 | 国产精品大尺度 | 免费色视频 | 在线有码中文 | 日韩伦理片hd| 人人狠狠| 国产色秀视频 | 狠狠狠色丁香综合久久天下网 | 久久天天躁夜夜躁狠狠躁2022 | 福利网址在线观看 | 久久久久国产精品免费免费搜索 | 精品在线一区二区 | 免费看一及片 | 成人av免费 | 久久久久成 | 日本久久久精品视频 | 国产一区二区在线免费播放 | 美女视频黄,久久 | 免费亚洲视频在线观看 | 亚洲视频在线视频 | 91中文在线| 免费色av| 久久久久久久久国产 | 奇米四色影狠狠爱7777 | 97电影院在线观看 | 91精品福利在线 | 高清视频一区二区三区 | 国产精品视频全国免费观看 | 亚洲3级 | 粉嫩av一区二区三区四区五区 | 久久66热这里只有精品 | 大胆欧美gogo免费视频一二区 | 91九色蝌蚪视频在线 | 91福利试看 | 日韩欧美观看 | 在线国产不卡 | 深夜男人影院 | 亚洲国产精品999 | 黄污网站在线 | 黄色av免费电影 | 国产精品久久久久久久久久妇女 | 亚洲人xxx | 91在线精品视频 | 日本成址在线观看 | 91av大全| 天天摸日日摸人人看 | 中文在线a天堂 | 五月花激情 | 丁香花中文字幕 | 婷婷在线免费 | 久久9视频 | 久久久精品国产一区二区电影四季 | av东方在线 | 久久久久久高潮国产精品视 | 国产 成人 久久 | 五月天激情开心 | 婷婷六月天天 | 中文字幕之中文字幕 | 91在线看黄 | 啪啪精品 | av中文字幕网址 | 国产美腿白丝袜足在线av | 91精品啪在线观看国产 | 亚洲精品黄色片 | 日日操网站| 伊人资源视频在线 | 91精品久久久久久久99蜜桃 | 香蕉影院在线播放 | 狠狠狠色丁香婷婷综合久久88 | 亚州欧美视频 | 国产精品美女久久久久aⅴ 干干夜夜 | 欧美色操 | 国产淫片| 91夫妻自拍 | 丁香激情五月婷婷 | 成人黄色国产 | 亚洲伊人成综合网 | 国产精品成人在线 | 国产精品毛片一区视频 | 麻豆一区二区三区视频 | 午夜色性片 | 国产精品一区二区三区久久 | 精品一区二区在线看 | 日韩在线观看视频免费 | av中文电影 | 91禁在线观看 | 国产精品久久久久久69 | 久久综合久久综合这里只有精品 | 国产一区在线免费观看视频 | 久久成人国产精品入口 | 精品国产一区二区三区免费 | 国产日韩欧美在线看 | 日韩精品你懂的 | 人人艹人人 | 亚洲成aⅴ人片久久青草影院 | 97色视频在线 | 国产精品久久久久毛片大屁完整版 | 国产一区二区三区四区大秀 | 日本免费久久高清视频 | 黄色一级大片免费看 | 久久精品一区二区三区四区 | 免费av观看网站 | 97超碰人人澡 | 亚洲视频高清 | 国产污视频在线观看 | 国产精品一区二区久久国产 | 亚洲精品国产成人 | 91成人亚洲 | 丁香花在线视频观看免费 | 91亚洲视频在线观看 | 精品免费 | 一区二区精品 | 成人黄色中文字幕 | 国产成人精品一区二区三区免费 | 亚洲一二视频 | 日韩aa视频 | 最近2019好看的中文字幕免费 | 亚洲精品乱码久久久久久久久久 | 日韩在线观看中文字幕 | 97在线免费观看视频 | 亚洲天堂自拍视频 | 亚洲国产小视频在线观看 | av电影在线观看 | 久久久www成人免费精品 | 中文字幕超清在线免费 | 久久看毛片 | av电影亚洲 | 婷婷五月在线视频 | 99视频这里有精品 | 国产精品99久久久久人中文网介绍 | 国产精品视频全国免费观看 | 日韩高清一二区 | 人人舔人人插 | 亚洲欧美在线综合 | 久草在线高清视频 | 午夜视频福利 | 亚洲国产欧美在线人成大黄瓜 | 免费看黄电影 | 亚洲永久在线 | 国产一区成人在线 | 精品在线观看国产 | 久久精品第一页 | 成人四虎影院 | 欧美激情精品久久久久久免费 | 欧美一级电影片 | 日日夜夜操av | 亚洲欧洲日韩在线观看 | 91桃色视频 | 高清av免费看 | 国产精品久久久久av免费 | 久久久久国产精品厨房 | 激情 亚洲| 久久9视频| 午夜精品一区二区三区可下载 | 日三级在线 | 婷婷六月综合亚洲 | 激情视频久久 | 精品自拍sae8—视频 | 亚洲精品免费在线观看 | 欧美日韩国产色综合一二三四 | 国产婷婷一区二区 | 久精品视频在线观看 | 亚洲高清网站 | 成人免费视频a | 国产福利av在线 | 久久99在线视频 | 免费看片网页 | 精品一二三四视频 | 欧美在线观看小视频 | 欧洲不卡av| 黄污网| 国产一区电影在线观看 | 国产成人综合图片 | 国产伦精品一区二区三区在线 | 国产精品观看在线亚洲人成网 | 91精品国产高清自在线观看 | 免费看一及片 | 欧美精品乱码久久久久久 | 97国产一区| 久久免费美女视频 | 国产九九九视频 | 蜜桃视频日本 | 久草视频在线播放 | 亚洲专区在线 | www.97视频| 91自拍91| 99 视频 高清| 国产精彩视频一区 | 亚洲综合情 | 激情综合色综合久久综合 | 久久99精品国产麻豆婷婷 | 日韩精品五月天 | 国产无套精品久久久久久 | 久久综合国产伦精品免费 | 成年人看片 | 高清一区二区三区av | 天天天天综合 | 久久久毛片 | 成人精品国产免费网站 | 97超碰在线久草超碰在线观看 | 黄色电影在线免费观看 | 91亚洲永久精品 | 欧美在线视频一区二区三区 | 欧美日韩91 | 麻豆国产网站 | 一区二区三区免费在线观看视频 | 六月丁香综合 | 日韩精品亚洲专区在线观看 | 99国内精品| 日本性视频 | av九九| 97精品国产97久久久久久久久久久久 | 午夜999| 欧美日韩一级久久久久久免费看 | 香蕉久久久久 | 久精品一区| 日韩免费电影一区二区三区 | 久久免费看 | 欧美一区二区三区四区夜夜大片 | 五月开心婷婷 | 69国产精品视频免费观看 | 久久久久这里只有精品 | 日本久久电影 | 国产 精品 资源 | 成人一区二区三区在线观看 | 中文字幕一区二区三区乱码在线 | 国产系列 在线观看 | 久精品视频在线观看 | 午夜视频免费播放 | 色婷婷国产精品一区在线观看 | 国产原创av在线 | 亚洲五月婷 | 久操视频在线播放 | 精品国产免费观看 | 欧美成人91| 日本中文字幕在线电影 | 成人午夜电影免费在线观看 | 右手影院亚洲欧美 | 在线亚洲播放 | 在线观看香蕉视频 | 亚洲最大av网站 | 这里只有精品视频在线 | 欧美与欧洲交xxxx免费观看 | 在线观看福利网站 | 国产剧情一区在线 | 久草在线资源观看 | 国内偷拍精品视频 | 日韩欧美中文 | 国产成人黄色 | 97视频总站| av成人免费网站 | 国产精品久久久久久影院 | 黄p网站在线观看 | www.av小说| 五月天婷婷丁香花 | 综合天天色 | 久草在线资源视频 | 久久在线 | 国产网站色 | 在线日本看片免费人成视久网 | 在线观看一级片 | 99视频精品全部免费 在线 | 日本精品一区二区三区在线观看 | 黄色网免费 | 精品在线播放 | 久久亚洲欧美日韩精品专区 | 天堂av在线中文在线 | 久久久69 | 一区二区精品在线视频 | 亚洲精品91天天久久人人 | www.99久久.com| 久久久久久久久久久福利 | 在线视频麻豆 | 五月天堂网 | 中文字幕在线观看一区二区 | 99久久er热在这里只有精品15 | 成年人毛片在线观看 | 欧美日韩一区二区视频在线观看 | 亚洲国产大片 | 久久精品视频在线免费观看 | 精品嫩模福利一区二区蜜臀 | 亚洲黄色成人网 | 中文在线免费看视频 | 国产在线播放观看 | 亚洲精区二区三区四区麻豆 | 精品国产一区二区三区在线观看 | 国产精品资源在线 | 美女视频一区二区 | 午夜精品麻豆 | 91精品国产92久久久久 | 成人永久在线 | 日韩精选在线观看 | 在线视频手机国产 | 欧美日韩国产一区二区三区在线观看 | 日韩欧美在线不卡 | 在线播放 日韩专区 | 中文网丁香综合网 | 国产精品一区二区中文字幕 | 亚洲综合在线播放 | 五月婷婷,六月丁香 | 成人精品国产免费网站 | 99国产精品视频免费观看一公开 | 91成人在线视频 | 97精品超碰一区二区三区 | 国产一级在线免费观看 | 91视频这里只有精品 | 国产精品福利在线播放 | 久久免费视频8 | 国产一区二区观看 | 久久久久久国产精品免费 | 日韩欧美有码在线 | 免费网站黄 | 96精品在线 | 免费看一及片 | 99久久婷婷国产精品综合 | 免费网站看v片在线a | 亚洲成人av在线电影 | 中文字幕在线观看的网站 | 精品一区二区三区香蕉蜜桃 | 午夜精品久久久 | 99草在线视频 | 免费在线观看av网站 | 国产电影黄色av | 久久久精品久久 | 免费亚洲视频 | 天堂在线一区二区 | 在线看v片成人 | 在线免费观看的av网站 | 欧美日韩国产一区二区三区在线观看 | 国产高清一区二区 | 国产精品一区电影 | 国产精品成人免费 | 久久99国产精品免费 | 精品国产一区二区三区四区vr | 亚洲va欧洲va国产va不卡 | 丁香五香天综合情 | a在线视频v视频 |