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_ms
在pcap_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_ms
在pcap_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
數值。 - 參數:
name
從pcap_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模式。