libpcap

libpcap的errbuf長度皆是PCAP_ERRBUF_SIZE

Error Code

libpcap的函數發生錯誤時返回值通常為-1,其他返回值有下列這些#define

/*
 * Error codes for the pcap API.
 * These will all be negative, so you can check for the success or
 * failure of a call that returns these codes by checking for a
 * negative value.
 */
#define PCAP_ERROR            -1    /* generic error code */
#define PCAP_ERROR_BREAK        -2    /* loop terminated by pcap_breakloop */
#define PCAP_ERROR_NOT_ACTIVATED    -3    /* the capture needs to be activated */
#define PCAP_ERROR_ACTIVATED        -4    /* the operation can't be performed on already activated captures */
#define PCAP_ERROR_NO_SUCH_DEVICE    -5    /* no such device exists */
#define PCAP_ERROR_RFMON_NOTSUP        -6    /* this device doesn't support rfmon (monitor) mode */
#define PCAP_ERROR_NOT_RFMON        -7    /* operation supported only in monitor mode */
#define PCAP_ERROR_PERM_DENIED        -8    /* no permission to open the device */
#define PCAP_ERROR_IFACE_NOT_UP        -9    /* interface isn't up */
#define PCAP_ERROR_CANTSET_TSTAMP_TYPE    -10    /* this device doesn't support setting the time stamp type */
#define PCAP_ERROR_PROMISC_PERM_DENIED    -11    /* you don't have permission to capture in promiscuous mode */
#define PCAP_ERROR_TSTAMP_PRECISION_NOTSUP -12  /* the requested time stamp precision is not supported */

/*
 * Warning codes for the pcap API.
 * These will all be positive and non-zero, so they won't look like
 * errors.
 */
#define PCAP_WARNING            1    /* generic warning code */
#define PCAP_WARNING_PROMISC_NOTSUP    2    /* this device doesn't support promiscuous mode */
#define PCAP_WARNING_TSTAMP_TYPE_NOTSUP    3    /* the requested time stamp type is not supported */

Interface相關

int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf);
  • 返回值:成功傳回0,失敗傳回-1,錯誤訊息在errbuf
  • 參數:alldevsp介面的鏈結指標的指標。errbuf錯誤訊息。
  • 功能:用來取得目前可用的Interface。


void pcap_freealldevs(pcap_if_t *alldevsp);
  • 參數:alldevsp介面的鏈結指標。
  • 功能:用來釋放從pcap_findalldevs()取得的Interface鏈結指標。


char *pcap_lookupdev(char *errbuf);
  • 返回值:成功傳回預設Interface,失敗傳回NULL,錯誤訊息在errbuf
  • 參數:errbuf錯誤訊息。
  • 功能:取得預設的Interface。


int pcap_lookupnet(const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf);
  • 返回值:成功傳回0,失敗傳回-1,錯誤訊息在errbuf
  • 參數:device要查詢的介面名稱。netp網段地址指標。maskp遮罩地址指標。errbuf錯誤訊息。
  • 功能:取得device的網段及遮罩。


pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf);
  • 返回值:成功傳回一個libpcap handle,失敗傳回NULL,錯誤訊息在errbuf
  • 參數:device表示要開啟的Interface。snaplen表示要獲得的封包長度。例如原始封包有1000 bytes,如果設置500則會獲取前500 bytes,可以指定IP封包的最大值65535表示不切割。promisc是否要設成混雜模式(promiscuous mode),1表示設置混雜模式。to_ms表示等待時間,在幾個抓封包的函數各有不同意思,會在各函數再解釋,單位毫秒。errbuf錯誤訊息。
  • 功能:打開一個Interface進行擷取封包。


void pcap_close(pcap_t *p);
  • 參數:p一個libpcap handle。
  • 功能:關閉lipcap handle並釋放資源。

抓封包相關

int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
  • 返回值:成功傳回0,失敗傳回-1,錯誤訊息從pcap_geterr()取得。
  • 參數:p一個libpcap handle。cnt抓取封包數量,-1表示無限多。callback當抓取封包時要呼叫的函數。user要傳給callback的參數。
  • 功能:該函數利用callback的方式抓取封包,當抓取到封包時會呼叫callback函數,只有發生錯誤時或抓到cnt數量的封包才會停止。

pcap_open_live()第四個參數to_mspcap_loop()影響是,當達到to_ms時間時才會處理封包,所以如果設定3000則會每三秒(3000毫秒)處理一次封包,所以如果必須要一直處理封包就設置成1,則會每毫秒處理。時間不宜設置太大,否則當核心的封包環狀佇列(Circular Queue)滿溢時會丟掉在前端的封包,所以就會發生掉封包的情況。但是不能設置為0,在一些系統上會block住,講白話就是卡住在那邊


int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
  • 返回值:成功傳回抓取封包的數量,失敗傳回-1,錯誤訊息從pcap_geterr()取得。
  • 參數:p一個libpcap handle。cnt抓取封包最多的數量,-1表示無限多。callback當抓取封包時要呼叫的函數。user要傳給callback的參數。
  • 功能:該函數利用callback的方式抓取封包,當抓取到封包時會呼叫callback函數,只有發生錯誤、抓到cnt數量或是在達到to_ms時間內都沒有封包時才會停止。

函數pcap_open_live()第四個參數to_mspcap_dispatch()作用是,當在to_ms時間內都沒有封包的話,就會退出函數,不管是否已經達到cnt數量,所以如果時間設置太短的話,很容易抓不到封包。處理時間跟pcap_loop()一樣,到達to_ms時間會處理,所以設置太大也會發生掉封包的情況。


int pcap_next_ex(pcap_ t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data);
  • 返回值:成功傳回1,失敗傳回-1,錯誤訊息從pcap_geterr()取得,timeout傳回0,讀取檔案時已經沒封包傳回-2。
  • 參數:p一個libpcap handle。pkt_header封包的表頭指標。pkt_data封包內容指標。
  • 功能:該函數只會抓取一個封包就馬上返回。

函數pcap_open_live()的第四個參數to_ms在這個函數單純就只是timeout,當達到to_ms時間都沒有封包就傳回0。


void pcap_breakloop(pcap_t *p);
  • 參數:p一個libpcap handle。
  • 功能:退出抓封包的loop,可以用在pcap_loop()pcap_dispatch()的callback內,或是用在多執行緒(Multithreading)程式內。

過濾器相關

int pcap_compile(pcap_t *p, struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask);
  • 返回值:成功傳回0,失敗傳回-1,錯誤訊息從pcap_geterr()取得。
  • 參數:p一個libpcap handle。program最後過濾器結果儲存的結構指標。buf過濾器表達式。optimize是否要最佳化。mask要設定的那個Interface的遮罩netmask。
  • 功能:將過濾器表達式轉成核心能夠使用過濾器結構。


int pcap_setfilter(pcap_t *p, struct bpf_program *program);
  • 返回值:成功傳回0,失敗傳回-1,錯誤訊息從pcap_geterr()取得。
  • 參數:p一個libpcap handle。program過濾器結構指標。
  • 功能:設定過濾器到libpcap handle上。


void pcap_freecode(struct bpf_program *program);
  • 參數:program要釋放的過濾器結構。
  • 功能:釋放從pcap_compile()產生的過濾器結構。

檔案操作相關

pcap_dumper_t *pcap_dump_open(pcap_t *p, const char *fname);
  • 返回值:成功傳回一個處理檔案的handle,失敗傳回NULL,錯誤訊息從pcap_geterr()取得。。
  • 參數:p一個libpcap handle。fname檔案絕對路徑名稱。
  • 功能:打開一個可以處理封包檔案的handle。


void pcap_dump(u_char *user, const pcap_pkthdr *header, const u_char *content);
  • 參數:user處理檔案的handle(從pcap_dump_open()取得)。header封包的表頭資訊。content封包的內容。
  • 功能:將封包丟到檔案內。


int pcap_dump_flush(pcap_dumper_t *p);
  • 返回值:成功傳回0,失敗傳回-1,錯誤訊息從pcap_geterr()取得。
  • 參數:p處理檔案的handle。
  • 功能:將處理檔案handle內的封包全部強迫清到檔案內。


void pcap_dump_close(pcap_dumper_t *p);
  • 參數:p處理檔案的handle。
  • 功能:釋放處理檔案handle的資源。


pcap_t *pcap_open_offline(const char *fname, char *errbuf);
  • 返回值:成功傳回一個libpcap handle,失敗傳回NULL,錯誤訊息在errbuf
  • 參數:fname要打開的檔案絕對路徑名稱。errbuf錯誤訊息。
  • 功能:打開一個封包檔案的handle。


FILE *pcap_file(pcap_t *p);
  • 返回值:成功傳回一個檔案指標,失敗傳回NULL。
  • 參數:p一個libpcap handle。
  • 功能:傳回pcap_open_offline()所被開啟的檔案指標,若是pcap_open_live()pcap_activate()pcap_create()則傳回NULL。


int pcap_fileno(pcap_t *p);
  • 返回值:成功傳回檔案描述子,失敗傳回-1。
  • 參數:p一個libpcap handle。
  • 功能:傳回pcap_open_live()所讀取封包的檔案描述子,如果是p並沒有使用過pcap_activate()則傳回-1。


 FILE *pcap_dump_file(pcap_dumper_t *p);
  • 返回值:成功傳回一個檔案指標,失敗傳回NULL。
  • 參數:p處理檔案的handle。
  • 功能:傳回從pcap_dump_open()所開啟的檔案指標。

錯誤相關

char *pcap_geterr(pcap_t *p);
  • 返回值:傳回錯誤訊息。
  • 參數:p一個libpcap handle。
  • 功能:當p使用函數時發生錯誤,可以用該函數傳回錯誤訊息。


void pcap_perror(pcap_t *p, char *prefix);
  • 參數:p一個libpcap handle。prefix要輸出的訊息前綴字串。
  • 功能:將p內的錯誤訊息顯示在stderr上。

Data-link層相關

Data-link層的類型都被#define成保留字,都是DLT_開頭,乙太網路保留字為DLT_EN10MB,其他libpcap的保留字還有:

#define DLT_CHOICE(code, description) { #code, description, code }
#define DLT_CHOICE_SENTINEL { NULL, NULL, 0 }

static struct dlt_choice dlt_choices[] = {
    DLT_CHOICE(DLT_NULL, "BSD loopback"),
    DLT_CHOICE(DLT_EN10MB, "Ethernet"),
    DLT_CHOICE(DLT_IEEE802, "Token ring"),
    DLT_CHOICE(DLT_ARCNET, "BSD ARCNET"),
    DLT_CHOICE(DLT_SLIP, "SLIP"),
    DLT_CHOICE(DLT_PPP, "PPP"),
    DLT_CHOICE(DLT_FDDI, "FDDI"),
    DLT_CHOICE(DLT_ATM_RFC1483, "RFC 1483 LLC-encapsulated ATM"),
    DLT_CHOICE(DLT_RAW, "Raw IP"),
    DLT_CHOICE(DLT_SLIP_BSDOS, "BSD/OS SLIP"),
    DLT_CHOICE(DLT_PPP_BSDOS, "BSD/OS PPP"),
    DLT_CHOICE(DLT_ATM_CLIP, "Linux Classical IP-over-ATM"),
    DLT_CHOICE(DLT_PPP_SERIAL, "PPP over serial"),
    DLT_CHOICE(DLT_PPP_ETHER, "PPPoE"),
        DLT_CHOICE(DLT_SYMANTEC_FIREWALL, "Symantec Firewall"),
    DLT_CHOICE(DLT_C_HDLC, "Cisco HDLC"),
    DLT_CHOICE(DLT_IEEE802_11, "802.11"),
    DLT_CHOICE(DLT_FRELAY, "Frame Relay"),
    DLT_CHOICE(DLT_LOOP, "OpenBSD loopback"),
    DLT_CHOICE(DLT_ENC, "OpenBSD encapsulated IP"),
    DLT_CHOICE(DLT_LINUX_SLL, "Linux cooked"),
    DLT_CHOICE(DLT_LTALK, "Localtalk"),
    DLT_CHOICE(DLT_PFLOG, "OpenBSD pflog file"),
    DLT_CHOICE(DLT_PFSYNC, "Packet filter state syncing"),
    DLT_CHOICE(DLT_PRISM_HEADER, "802.11 plus Prism header"),
    DLT_CHOICE(DLT_IP_OVER_FC, "RFC 2625 IP-over-Fibre Channel"),
    DLT_CHOICE(DLT_SUNATM, "Sun raw ATM"),
    DLT_CHOICE(DLT_IEEE802_11_RADIO, "802.11 plus radiotap header"),
    DLT_CHOICE(DLT_ARCNET_LINUX, "Linux ARCNET"),
        DLT_CHOICE(DLT_JUNIPER_MLPPP, "Juniper Multi-Link PPP"),
    DLT_CHOICE(DLT_JUNIPER_MLFR, "Juniper Multi-Link Frame Relay"),
        DLT_CHOICE(DLT_JUNIPER_ES, "Juniper Encryption Services PIC"),
        DLT_CHOICE(DLT_JUNIPER_GGSN, "Juniper GGSN PIC"),
    DLT_CHOICE(DLT_JUNIPER_MFR, "Juniper FRF.16 Frame Relay"),
        DLT_CHOICE(DLT_JUNIPER_ATM2, "Juniper ATM2 PIC"),
        DLT_CHOICE(DLT_JUNIPER_SERVICES, "Juniper Advanced Services PIC"),
        DLT_CHOICE(DLT_JUNIPER_ATM1, "Juniper ATM1 PIC"),
    DLT_CHOICE(DLT_APPLE_IP_OVER_IEEE1394, "Apple IP-over-IEEE 1394"),
    DLT_CHOICE(DLT_MTP2_WITH_PHDR, "SS7 MTP2 with Pseudo-header"),
    DLT_CHOICE(DLT_MTP2, "SS7 MTP2"),
    DLT_CHOICE(DLT_MTP3, "SS7 MTP3"),
    DLT_CHOICE(DLT_SCCP, "SS7 SCCP"),
    DLT_CHOICE(DLT_DOCSIS, "DOCSIS"),
    DLT_CHOICE(DLT_LINUX_IRDA, "Linux IrDA"),
    DLT_CHOICE(DLT_IEEE802_11_RADIO_AVS, "802.11 plus AVS radio information header"),
        DLT_CHOICE(DLT_JUNIPER_MONITOR, "Juniper Passive Monitor PIC"),
    DLT_CHOICE(DLT_BACNET_MS_TP, "BACnet MS/TP"),
    DLT_CHOICE(DLT_PPP_PPPD, "PPP for pppd, with direction flag"),
    DLT_CHOICE(DLT_JUNIPER_PPPOE, "Juniper PPPoE"),
    DLT_CHOICE(DLT_JUNIPER_PPPOE_ATM, "Juniper PPPoE/ATM"),
    DLT_CHOICE(DLT_GPRS_LLC, "GPRS LLC"),
    DLT_CHOICE(DLT_GPF_T, "GPF-T"),
    DLT_CHOICE(DLT_GPF_F, "GPF-F"),
    DLT_CHOICE(DLT_JUNIPER_PIC_PEER, "Juniper PIC Peer"),
    DLT_CHOICE(DLT_ERF_ETH,    "Ethernet with Endace ERF header"),
    DLT_CHOICE(DLT_ERF_POS, "Packet-over-SONET with Endace ERF header"),
    DLT_CHOICE(DLT_LINUX_LAPD, "Linux vISDN LAPD"),
    DLT_CHOICE(DLT_JUNIPER_ETHER, "Juniper Ethernet"),
    DLT_CHOICE(DLT_JUNIPER_PPP, "Juniper PPP"),
    DLT_CHOICE(DLT_JUNIPER_FRELAY, "Juniper Frame Relay"),
    DLT_CHOICE(DLT_JUNIPER_CHDLC, "Juniper C-HDLC"),
    DLT_CHOICE(DLT_MFR, "FRF.16 Frame Relay"),
    DLT_CHOICE(DLT_JUNIPER_VP, "Juniper Voice PIC"),
    DLT_CHOICE(DLT_A429, "Arinc 429"),
    DLT_CHOICE(DLT_A653_ICM, "Arinc 653 Interpartition Communication"),
    DLT_CHOICE(DLT_USB, "USB"),
    DLT_CHOICE(DLT_BLUETOOTH_HCI_H4, "Bluetooth HCI UART transport layer"),
    DLT_CHOICE(DLT_IEEE802_16_MAC_CPS, "IEEE 802.16 MAC Common Part Sublayer"),
    DLT_CHOICE(DLT_USB_LINUX, "USB with Linux header"),
    DLT_CHOICE(DLT_CAN20B, "Controller Area Network (CAN) v. 2.0B"),
    DLT_CHOICE(DLT_IEEE802_15_4_LINUX, "IEEE 802.15.4 with Linux padding"),
    DLT_CHOICE(DLT_PPI, "Per-Packet Information"),
    DLT_CHOICE(DLT_IEEE802_16_MAC_CPS_RADIO, "IEEE 802.16 MAC Common Part Sublayer plus radiotap header"),
    DLT_CHOICE(DLT_JUNIPER_ISM, "Juniper Integrated Service Module"),
    DLT_CHOICE(DLT_IEEE802_15_4, "IEEE 802.15.4 with FCS"),
    DLT_CHOICE(DLT_SITA, "SITA pseudo-header"),
    DLT_CHOICE(DLT_ERF, "Endace ERF header"),
    DLT_CHOICE(DLT_RAIF1, "Ethernet with u10 Networks pseudo-header"),
    DLT_CHOICE(DLT_IPMB, "IPMB"),
    DLT_CHOICE(DLT_JUNIPER_ST, "Juniper Secure Tunnel"),
    DLT_CHOICE(DLT_BLUETOOTH_HCI_H4_WITH_PHDR, "Bluetooth HCI UART transport layer plus pseudo-header"),
    DLT_CHOICE(DLT_AX25_KISS, "AX.25 with KISS header"),
    DLT_CHOICE(DLT_IEEE802_15_4_NONASK_PHY, "IEEE 802.15.4 with non-ASK PHY data"),
    DLT_CHOICE(DLT_MPLS, "MPLS with label as link-layer header"),
    DLT_CHOICE(DLT_LINUX_EVDEV, "Linux evdev events"),
    DLT_CHOICE(DLT_USB_LINUX_MMAPPED, "USB with padded Linux header"),
    DLT_CHOICE(DLT_DECT, "DECT"),
    DLT_CHOICE(DLT_AOS, "AOS Space Data Link protocol"),
    DLT_CHOICE(DLT_WIHART, "Wireless HART"),
    DLT_CHOICE(DLT_FC_2, "Fibre Channel FC-2"),
    DLT_CHOICE(DLT_FC_2_WITH_FRAME_DELIMS, "Fibre Channel FC-2 with frame delimiters"),
    DLT_CHOICE(DLT_IPNET, "Solaris ipnet"),
    DLT_CHOICE(DLT_CAN_SOCKETCAN, "CAN-bus with SocketCAN headers"),
    DLT_CHOICE(DLT_IPV4, "Raw IPv4"),
    DLT_CHOICE(DLT_IPV6, "Raw IPv6"),
    DLT_CHOICE(DLT_IEEE802_15_4_NOFCS, "IEEE 802.15.4 without FCS"),
    DLT_CHOICE(DLT_DBUS, "D-Bus"),
    DLT_CHOICE(DLT_JUNIPER_VS, "Juniper Virtual Server"),
    DLT_CHOICE(DLT_JUNIPER_SRX_E2E, "Juniper SRX E2E"),
    DLT_CHOICE(DLT_JUNIPER_FIBRECHANNEL, "Juniper Fibre Channel"),
    DLT_CHOICE(DLT_DVB_CI, "DVB-CI"),
    DLT_CHOICE(DLT_MUX27010, "MUX27010"),
    DLT_CHOICE(DLT_STANAG_5066_D_PDU, "STANAG 5066 D_PDUs"),
    DLT_CHOICE(DLT_JUNIPER_ATM_CEMIC, "Juniper ATM CEMIC"),
    DLT_CHOICE(DLT_NFLOG, "Linux netfilter log messages"),
    DLT_CHOICE(DLT_NETANALYZER, "Ethernet with Hilscher netANALYZER pseudo-header"),
    DLT_CHOICE(DLT_NETANALYZER_TRANSPARENT, "Ethernet with Hilscher netANALYZER pseudo-header and with preamble and SFD"),
    DLT_CHOICE(DLT_IPOIB, "RFC 4391 IP-over-Infiniband"),
    DLT_CHOICE(DLT_MPEG_2_TS, "MPEG-2 transport stream"),
    DLT_CHOICE(DLT_NG40, "ng40 protocol tester Iub/Iur"),
    DLT_CHOICE(DLT_NFC_LLCP, "NFC LLCP PDUs with pseudo-header"),
    DLT_CHOICE(DLT_INFINIBAND, "InfiniBand"),
    DLT_CHOICE(DLT_SCTP, "SCTP"),
    DLT_CHOICE(DLT_USBPCAP, "USB with USBPcap header"),
    DLT_CHOICE(DLT_RTAC_SERIAL, "Schweitzer Engineering Laboratories RTAC packets"),
    DLT_CHOICE(DLT_BLUETOOTH_LE_LL, "Bluetooth Low Energy air interface"),
    DLT_CHOICE(DLT_NETLINK, "Linux netlink"),
    DLT_CHOICE(DLT_BLUETOOTH_LINUX_MONITOR, "Bluetooth Linux Monitor"),
    DLT_CHOICE(DLT_BLUETOOTH_BREDR_BB, "Bluetooth Basic Rate/Enhanced Data Rate baseband packets"),
    DLT_CHOICE(DLT_BLUETOOTH_LE_LL_WITH_PHDR, "Bluetooth Low Energy air interface with pseudo-header"),
    DLT_CHOICE(DLT_PROFIBUS_DL, "PROFIBUS data link layer"),
    DLT_CHOICE(DLT_PKTAP, "Apple DLT_PKTAP"),
    DLT_CHOICE(DLT_EPON, "Ethernet with 802.3 Clause 65 EPON preamble"),
    DLT_CHOICE_SENTINEL
};


int pcap_datalink(pcap_t *p);
  • 返回值:傳回p的data-link類型。
  • 參數:p一個libpcap handle。
  • 功能:取得p的data-link類型。


int pcap_list_datalinks(pcap_t *p, int **dlt_buf);
  • 返回值:傳回p的data-link支援類型數量,失敗傳回-1。
  • 參數:p一個libpcap handle。dlt_buf結果陣列指標。
  • 功能:取得p所支援的data-link所有類型。


int pcap_set_datalink(pcap_t *p, int dlt);
  • 返回值:成功傳回0,失敗傳回-1。
  • 參數:p一個libpcap handle。dlt要設定的類型。
  • 功能:修改p的data-link類型以抓不同類型封包。


const char *pcap_datalink_val_to_name(int dlt);
  • 返回值:傳回dlt的字串名稱。
  • 參數:dlt要取得字串名稱的data-link類型。
  • 功能:取得dlt的字串名稱。


const char *pcap_datalink_val_to_description(int dlt);
  • 返回值:傳回dlt的字串描述。
  • 參數:dlt要取得字串描述的data-link類型。
  • 功能:取得dlt的字串描述。


int pcap_datalink_name_to_val(char *name);
  • 返回值:傳回name所對應的DLT_XXX數值。
  • 參數:namepcap_datalink_val_to_name()取得的字串名稱。
  • 功能:將字串的名稱轉成所對應的DLT_XXX數值。


void pcap_free_datalinks(int *dlt_buf);
  • 參數:dlt_buf要釋放的指標。
  • 功能:釋放從pcap_list_datalinks()取得的指標。

發送封包相關

int pcap_sendpacket(pcap_t *p, const u_char *buf, int size);
  • 返回值:成功傳回0,失敗傳回-1,錯誤訊息從pcap_geterr()取得。
  • 參數:p一個libpcap handle。buf要送出去的封包。size送出大小。
  • 功能:從p所開啟的Interface送出封包。


int pcap_inject(pcap_t *p, const void *buf, size_t size);
  • 返回值:成功傳回送出封包的byte數,失敗傳回-1,錯誤訊息從pcap_geterr()取得。
  • 參數:p一個libpcap handle。buf要送出去的封包。size送出大小。
  • 功能:從p所開啟的Interface送出封包。

輔助函數

int pcap_stats(pcap_t *p, struct pcap_stat *ps);
  • 返回值:成功傳回0,失敗傳回-1,錯誤訊息從pcap_geterr()取得。
  • 參數:p一個libpcap handle。ps結果結構。
  • 功能:取得p目前的狀態。


int pcap_snapshot(pcap_t *p);
  • 返回值:成功傳回封包切割大小,失敗傳回PCAP_ERROR_NOT_ACTIVATED
  • 參數:p一個libpcap handle。
  • 功能:取得pcap_open_live()所設定的封包切割大小。


int pcap_is_swapped(pcap_t *p);
  • 返回值:當p開啟自封包檔案且封包的byte order與主機不同傳回1(true),其餘皆傳回0(false)。
  • 參數:p一個libpcap handle。
  • 功能:取得p的byte order是否是host order。


int pcap_major_version(pcap_t *p);
int pcap_minor_version(pcap_t *p);
  • 返回值:封包檔案的版本號碼。
  • 參數:p一個libpcap handle。
  • 功能:取得封包檔案的版本號碼。


const char *pcap_lib_version(void);
  • 返回值:libpcap版本。
  • 功能:取得libpcap版本。


int pcap_getnonblock(pcap_t *p, char *errbuf);
  • 返回值:傳回1表示nonblock,傳回0表示block,失敗傳回-1,錯誤訊息在errbuf,如果p是一個檔案則總是傳回0。
  • 參數:p一個libpcap handle。errbuf錯誤訊息。
  • 功能:取得目前是否為block模式。


int pcap_setnonblock(pcap_t *p, int nonblock, char *errbuf);
  • 返回值:成功傳回0,失敗傳回-1。
  • 參數:p一個libpcap handle。nonblock是否要非block模式,1表示設置為非block模式。errbuf錯誤訊息。
  • 功能:將p設置是否要非block模式。

results matching ""

    No results matching ""