1145519Sdarrenr/* $FreeBSD$ */ 2145510Sdarrenr 3145510Sdarrenr/* 4255332Scy * Copyright (C) 2012 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr * 8145510Sdarrenr * Added redirect stuff and a variety of bug fixes. (mcn@EnGarde.com) 9145510Sdarrenr */ 10145510Sdarrenr 11145510Sdarrenr#include "ipf.h" 12145510Sdarrenr#include "kmem.h" 13145510Sdarrenr 14145510Sdarrenr 15145510Sdarrenr#if !defined(lint) 16255332Scystatic const char rcsid[] = "@(#)$Id$"; 17145510Sdarrenr#endif 18145510Sdarrenr 19145510Sdarrenr 20255332Scyvoid 21255332Scyprintaps(aps, opts, proto) 22255332Scy ap_session_t *aps; 23255332Scy int opts, proto; 24145510Sdarrenr{ 25145510Sdarrenr ipsec_pxy_t ipsec; 26145510Sdarrenr ap_session_t ap; 27145510Sdarrenr ftpinfo_t ftp; 28145510Sdarrenr aproxy_t apr; 29145510Sdarrenr raudio_t ra; 30145510Sdarrenr 31145510Sdarrenr if (kmemcpy((char *)&ap, (long)aps, sizeof(ap))) 32145510Sdarrenr return; 33145510Sdarrenr if (kmemcpy((char *)&apr, (long)ap.aps_apr, sizeof(apr))) 34145510Sdarrenr return; 35255332Scy PRINTF("\tproxy %s/%d use %d flags %x\n", apr.apr_label, 36145510Sdarrenr apr.apr_p, apr.apr_ref, apr.apr_flags); 37145510Sdarrenr#ifdef USE_QUAD_T 38255332Scy PRINTF("\tbytes %"PRIu64" pkts %"PRIu64"", 39255332Scy (unsigned long long)ap.aps_bytes, 40145510Sdarrenr (unsigned long long)ap.aps_pkts); 41145510Sdarrenr#else 42255332Scy PRINTF("\tbytes %lu pkts %lu", ap.aps_bytes, ap.aps_pkts); 43145510Sdarrenr#endif 44255332Scy PRINTF(" data %s\n", ap.aps_data ? "YES" : "NO"); 45255332Scy if ((proto == IPPROTO_TCP) && (opts & OPT_VERBOSE)) { 46255332Scy PRINTF("\t\tstate[%u,%u], sel[%d,%d]\n", 47145510Sdarrenr ap.aps_state[0], ap.aps_state[1], 48145510Sdarrenr ap.aps_sel[0], ap.aps_sel[1]); 49145510Sdarrenr#if (defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011)) || \ 50145510Sdarrenr (__FreeBSD_version >= 300000) || defined(OpenBSD) 51255332Scy PRINTF("\t\tseq: off %hd/%hd min %x/%x\n", 52145510Sdarrenr ap.aps_seqoff[0], ap.aps_seqoff[1], 53145510Sdarrenr ap.aps_seqmin[0], ap.aps_seqmin[1]); 54255332Scy PRINTF("\t\tack: off %hd/%hd min %x/%x\n", 55145510Sdarrenr ap.aps_ackoff[0], ap.aps_ackoff[1], 56145510Sdarrenr ap.aps_ackmin[0], ap.aps_ackmin[1]); 57145510Sdarrenr#else 58255332Scy PRINTF("\t\tseq: off %hd/%hd min %lx/%lx\n", 59145510Sdarrenr ap.aps_seqoff[0], ap.aps_seqoff[1], 60145510Sdarrenr ap.aps_seqmin[0], ap.aps_seqmin[1]); 61255332Scy PRINTF("\t\tack: off %hd/%hd min %lx/%lx\n", 62145510Sdarrenr ap.aps_ackoff[0], ap.aps_ackoff[1], 63145510Sdarrenr ap.aps_ackmin[0], ap.aps_ackmin[1]); 64145510Sdarrenr#endif 65145510Sdarrenr } 66145510Sdarrenr 67145510Sdarrenr if (!strcmp(apr.apr_label, "raudio") && ap.aps_psiz == sizeof(ra)) { 68145510Sdarrenr if (kmemcpy((char *)&ra, (long)ap.aps_data, sizeof(ra))) 69145510Sdarrenr return; 70255332Scy PRINTF("\tReal Audio Proxy:\n"); 71255332Scy PRINTF("\t\tSeen PNA: %d\tVersion: %d\tEOS: %d\n", 72145510Sdarrenr ra.rap_seenpna, ra.rap_version, ra.rap_eos); 73255332Scy PRINTF("\t\tMode: %#x\tSBF: %#x\n", ra.rap_mode, ra.rap_sbf); 74255332Scy PRINTF("\t\tPorts:pl %hu, pr %hu, sr %hu\n", 75145510Sdarrenr ra.rap_plport, ra.rap_prport, ra.rap_srport); 76145510Sdarrenr } else if (!strcmp(apr.apr_label, "ftp") && 77145510Sdarrenr (ap.aps_psiz == sizeof(ftp))) { 78145510Sdarrenr if (kmemcpy((char *)&ftp, (long)ap.aps_data, sizeof(ftp))) 79145510Sdarrenr return; 80255332Scy PRINTF("\tFTP Proxy:\n"); 81255332Scy PRINTF("\t\tpassok: %d\n", ftp.ftp_passok); 82145510Sdarrenr ftp.ftp_side[0].ftps_buf[FTP_BUFSZ - 1] = '\0'; 83145510Sdarrenr ftp.ftp_side[1].ftps_buf[FTP_BUFSZ - 1] = '\0'; 84255332Scy PRINTF("\tClient:\n"); 85255332Scy PRINTF("\t\tseq %x (ack %x) len %d junk %d cmds %d\n", 86145510Sdarrenr ftp.ftp_side[0].ftps_seq[0], 87145510Sdarrenr ftp.ftp_side[0].ftps_seq[1], 88145510Sdarrenr ftp.ftp_side[0].ftps_len, ftp.ftp_side[0].ftps_junk, 89145510Sdarrenr ftp.ftp_side[0].ftps_cmds); 90255332Scy PRINTF("\t\tbuf ["); 91145510Sdarrenr printbuf(ftp.ftp_side[0].ftps_buf, FTP_BUFSZ, 1); 92255332Scy PRINTF("]\n\tServer:\n"); 93255332Scy PRINTF("\t\tseq %x (ack %x) len %d junk %d cmds %d\n", 94145510Sdarrenr ftp.ftp_side[1].ftps_seq[0], 95145510Sdarrenr ftp.ftp_side[1].ftps_seq[1], 96145510Sdarrenr ftp.ftp_side[1].ftps_len, ftp.ftp_side[1].ftps_junk, 97145510Sdarrenr ftp.ftp_side[1].ftps_cmds); 98255332Scy PRINTF("\t\tbuf ["); 99145510Sdarrenr printbuf(ftp.ftp_side[1].ftps_buf, FTP_BUFSZ, 1); 100255332Scy PRINTF("]\n"); 101145510Sdarrenr } else if (!strcmp(apr.apr_label, "ipsec") && 102145510Sdarrenr (ap.aps_psiz == sizeof(ipsec))) { 103145510Sdarrenr if (kmemcpy((char *)&ipsec, (long)ap.aps_data, sizeof(ipsec))) 104145510Sdarrenr return; 105255332Scy PRINTF("\tIPSec Proxy:\n"); 106255332Scy PRINTF("\t\tICookie %08x%08x RCookie %08x%08x %s\n", 107145510Sdarrenr (u_int)ntohl(ipsec.ipsc_icookie[0]), 108145510Sdarrenr (u_int)ntohl(ipsec.ipsc_icookie[1]), 109145510Sdarrenr (u_int)ntohl(ipsec.ipsc_rcookie[0]), 110145510Sdarrenr (u_int)ntohl(ipsec.ipsc_rcookie[1]), 111145510Sdarrenr ipsec.ipsc_rckset ? "(Set)" : "(Not set)"); 112145510Sdarrenr } 113145510Sdarrenr} 114