diff --git a/new_packet.pxd b/new_packet.pxd index 9085941..abea666 100644 --- a/new_packet.pxd +++ b/new_packet.pxd @@ -54,6 +54,119 @@ cdef enum: IPPROTO_TCP = 6 # Transmission Control Protocol. IPPROTO_UDP = 17 # User Datagram Protocol. +cdef extern from "Python.h": + object PyBytes_FromStringAndSize(char *s, Py_ssize_t len) + object PyString_FromStringAndSize(char *s, Py_ssize_t len) + +cdef extern from "sys/time.h": + ctypedef long time_t + struct timeval: + time_t tv_sec + time_t tv_usec + struct timezone: + pass + +cdef extern from "netinet/in.h": + u_int32_t ntohl (u_int32_t __netlong) nogil + u_int16_t ntohs (u_int16_t __netshort) nogil + u_int32_t htonl (u_int32_t __hostlong) nogil + u_int16_t htons (u_int16_t __hostshort) nogil + +cdef extern from "libnfnetlink/linux_nfnetlink.h": + struct nfgenmsg: + u_int8_t nfgen_family + u_int8_t version + u_int16_t res_id + +cdef extern from "libnfnetlink/libnfnetlink.h": + struct nfnl_handle: + pass + unsigned int nfnl_rcvbufsiz(nfnl_handle *h, unsigned int size) + +cdef extern from "libnetfilter_queue/linux_nfnetlink_queue.h": + enum nfqnl_config_mode: + NFQNL_COPY_NONE + NFQNL_COPY_META + NFQNL_COPY_PACKET + struct nfqnl_msg_packet_hdr: + u_int32_t packet_id + u_int16_t hw_protocol + u_int8_t hook + +cdef extern from "libnetfilter_queue/libnetfilter_queue.h": + struct nfq_handle: + pass + struct nfq_q_handle: + pass + struct nfq_data: + pass + struct nfqnl_msg_packet_hw: + u_int8_t hw_addr[8] + + nfq_handle *nfq_open() + int nfq_close(nfq_handle *h) + + int nfq_bind_pf(nfq_handle *h, u_int16_t pf) + int nfq_unbind_pf(nfq_handle *h, u_int16_t pf) + ctypedef int *nfq_callback(nfq_q_handle *gh, nfgenmsg *nfmsg, + nfq_data *nfad, void *data) + nfq_q_handle *nfq_create_queue(nfq_handle *h, + u_int16_t num, + nfq_callback *cb, + void *data) + int nfq_destroy_queue(nfq_q_handle *qh) + + int nfq_handle_packet(nfq_handle *h, char *buf, int len) + + int nfq_set_mode(nfq_q_handle *qh, + u_int8_t mode, unsigned int len) + + q_set_queue_maxlen(nfq_q_handle *qh, + u_int32_t queuelen) + + int nfq_set_verdict(nfq_q_handle *qh, + u_int32_t id, + u_int32_t verdict, + u_int32_t data_len, + unsigned char *buf) nogil + + int nfq_set_verdict2(nfq_q_handle *qh, + u_int32_t id, + u_int32_t verdict, + u_int32_t mark, + u_int32_t datalen, + unsigned char *buf) nogil + int nfq_set_queue_maxlen(nfq_q_handle *qh, u_int32_t queuelen) + + int nfq_fd(nfq_handle *h) + nfqnl_msg_packet_hdr *nfq_get_msg_packet_hdr(nfq_data *nfad) + int nfq_get_payload(nfq_data *nfad, unsigned char **data) + int nfq_get_timestamp(nfq_data *nfad, timeval *tv) + nfqnl_msg_packet_hw *nfq_get_packet_hw(nfq_data *nfad) + int nfq_get_nfmark (nfq_data *nfad) + u_int8_t nfq_get_indev(nfq_data *nfad) + u_int8_t nfq_get_outdev(nfq_data *nfad) + nfnl_handle *nfq_nfnlh(nfq_handle *h) + +# Dummy defines from linux/socket.h: +cdef enum: # Protocol families, same as address families. + PF_INET = 2 + PF_INET6 = 10 + +cdef extern from "sys/socket.h": + ssize_t recv(int __fd, void *__buf, size_t __n, int __flags) nogil + int MSG_DONTWAIT + +# Dummy defines from linux/netfilter.h +cdef enum: + NF_DROP + NF_ACCEPT + NF_STOLEN + NF_QUEUE + NF_REPEAT + NF_STOP + NF_MAX_VERDICT = NF_STOP + cdef class CPacket: cdef nfq_q_handle *_qh