WinPcap 프로 그래 밍 상용 함수 와 데이터 구조
14313 단어 데이터 구조
상용 함수 와 구조 체
1. pcap_if_t 구조 체, 어댑터 목록 중 하 나 를 표시 합 니 다.
/*
* Item in a list of interfaces.
*/
struct pcap_if {
struct pcap_if *next;
char *name; /* name to hand to "pcap_open_live()" */
char *description; /* textual description of interface, or NULL */
struct pcap_addr *addresses;
bpf_u_int32 flags; /* PCAP_IF_ interface flags */
};
typedef struct pcap_if pcap_if_t;
2. pcap_findalldevs_ex () 어댑터 목록 가 져 오기, 0 으로 돌아 가기 정상, - 1 오류 표시
int pcap_findalldevs_ex(char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf);
3. pcap_freealldevs () 어댑터 링크 공간 방출
void pcap_freealldevs(pcap_if_t *);
4. pcap_addr_t 구조 체, 인터페이스 주소 표시 형식
/*
* Representation of an interface address.
*/
struct pcap_addr {
struct pcap_addr *next;
struct sockaddr *addr; /* address */
struct sockaddr *netmask; /* netmask for that address */
struct sockaddr *broadaddr; /* broadcast address for that address */
struct sockaddr *dstaddr; /* P2P destination address for that address */
};
typedef struct pcap_addr pcap_addr_t;
5. sockaddr_in 구조 체, 인터페이스 주소 표시 형식
struct sockaddr_in {
short sin_family; //
u_short sin_port; //
struct in_addr sin_addr; //
char sin_zero[8];
};
struct sockaddr {
u_short sa_family;
char sa_data[14];
}; // socket
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
#define s_addr S_un.S_addr #define s_host S_un.S_un_b.s_b2 #define s_net S_un.S_un_b.s_b1 #define s_imp S_un.S_un_w.s_w2 #define s_impno S_un.S_un_b.s_b4 #define s_lh S_un.S_un_b.s_b3
};
위 에서 보 듯 이 위 에서 세 가지 구조 체 를 정 의 했 습 니 다: sockaddrin, sockaddr 와 inaddr。간단하게 말 하면 이 세 개의 구조 체 는 sockaddr 는 통용 되 는 socket 주소 이 고 sockaddr인 터 넷 으로 구체 적 인 socket 주소 로 둘 사이 에 유형 변환 이 가능 합 니 다.이 인addr 구조 체 는 32 비트 IP 주소 입 니 다.이것 은 사실 모두 socket 프로 그래 밍 의 지식 이기 때문에 조금 만 언급 할 뿐 관심 이 있 는 것 은 세 심하게 연구 할 수 있 습 니 다.
6. pcap_open () 어댑터 열기
pcap_t *pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf);
7. pcap_loop () 캡 처 패 킷, 그 중 pcaphandler 는 반전 함수 포인터 입 니 다.
int pcap_loop ( pcap_t * p,
int cnt,
pcap_handler callback,
u_char * user
)
typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
const u_char *);
8. pcap_next_ex () 데이터 패 킷 을 직접 얻 습 니 다. 리 셋 방법 이 아 닙 니 다.pcap_pkthdr 구조 체 는 dump 파일 의 패 킷 첫 번 째 부분 을 표시 합 니 다.
int pcap_next_ex ( pcap_t * p,
struct pcap_pkthdr ** pkt_header,
const u_char ** pkt_data
)
/*
* Generic per-packet information, as supplied by libpcap.
*
* The time stamp can and should be a "struct timeval", regardless of
* whether your system supports 32-bit tv_sec in "struct timeval",
* 64-bit tv_sec in "struct timeval", or both if it supports both 32-bit
* and 64-bit applications. The on-disk format of savefiles uses 32-bit
* tv_sec (and tv_usec); this structure is irrelevant to that. 32-bit
* and 64-bit versions of libpcap, even if they're on the same platform,
* should supply the appropriate version of "struct timeval", even if
* that's not what the underlying packet capture mechanism supplies.
*/
struct pcap_pkthdr {
struct timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
struct timeval { long tv_sec; long tv_usec; };
9. pcap_compile() 패 킷 필 터 를 컴 파일 하여 프로그램의 고급 필터 표현 식 을 커 널 급 필터 엔진 에 의 해 처리 할 수 있 는 것 으로 변환 합 니 다.
bpf program 구조 체 에 대해 서 는 pcap copile () 이 최종 적 으로 걸 러 낼 것 이라는 것 만 알 아야 합 니 다.
int pcap_compile(pcap_t *, struct bpf_program *, const char *, int,
bpf_u_int32);
/*
* Structure for "pcap_compile()", "pcap_setfilter()", etc..
*/
struct bpf_program {
u_int bf_len;
struct bpf_insn *bf_insns;
};
/*
* The instruction data structure.
*/
struct bpf_insn {
u_short code;
u_char jt;
u_char jf;
bpf_u_int32 k;
};
10. pcap_setfilter() 캡 처 과정 에서 필 터 를 연결 합 니 다.
pcap 구조 체 는 열 린 인 스 턴 스 를 캡 처 하 는 설명자 입 니 다. 이 구조 체 는 사용자 에 게 불투명 합 니 다. wpcap. dll 에서 제공 하 는 함 수 를 통 해 내용 을 유지 합 니 다.
int pcap_setfilter(pcap_t *, struct bpf_program *);
typedef struct pcap pcap_t;
11. pcap_datalink() 어댑터 의 링크 층 을 되 돌려 줍 니 다.
int pcap_datalink(pcap_t *);
12. pcap dump open () 은 패 킷 에 쓸 파일 을 엽 니 다. pcap dumper 구조 체 는 libpcap 저장 파일 의 설명 자 를 표시 합 니 다.
pcap_dumper_t *pcap_dump_open(pcap_t *, const char *);
typedef struct pcap_dumper pcap_dumper_t;
13. pcap_dump() 패 킷 을 디스크 에 저장 합 니 다.
void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
14. pcap_createsrcstr() 문자열 (hot name, port,...) 을 받 고 새로운 형식 에 따라 완전한 원본 문자열 (예: 'rpcap://1.2.3.4/eth0')
int pcap_createsrcstr(char *source, int type, const char *host, const char *port, const char *name, char *errbuf);
15. pcap live dump () 는 캡 처 를 파일 에 저장 합 니 다. pcap dump () 와 의 차 이 는 "오프라인 dump 파일 처리 (하)" 에 설명 되 어 있 습 니 다.
int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks);
16. pcap sendpacket () 원시 패 킷 보 내기
int pcap_sendpacket(pcap_t *, const u_char *, int);
17. pcap sendquue alloc () 발송 대기 열 생 성
pcap_sendqueue_queue() 보 낼 패 킷 을 대기 열 에 추가 합 니 다.
pcap_sendqueue_transmit() 송신 데이터 큐
pcap sendquue destroy () 데이터 큐 방출
pcap_send_queue* pcap_sendqueue_alloc(u_int memsize);
int pcap_sendqueue_queue(pcap_send_queue* queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);
u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue* queue, int sync);
void pcap_sendqueue_destroy(pcap_send_queue* queue);
18. pcap send queue 구조 체, 데이터 보고 대기 열 을 보 내 는 데이터 구조
/*!
\brief A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit().
*/
struct pcap_send_queue
{
u_int maxlen; ///< Maximum size of the the queue, in bytes. This variable contains the size of the buffer field.
u_int len; ///< Current size of the queue, in bytes.
char *buffer; ///< Buffer containing the packets to be sent.
};
typedef struct pcap_send_queue pcap_send_queue;
19. pcap setmode () 어댑터 작업 모드 설정
int pcap_setmode(pcap_t *p, int mode);
필드 의미
PCAP_ERRBUF_SIZE libpcap , 256
PCAP_BUF_SIZE , 1024
PCAP_SRC_IF_STRING rpcap , “rpcap://”
PCAP_IF_LOOPBACK , 0x00000001
PCAP_OPENFLAG_PROMISCUOUS , 1
DLT_EN10MB
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.