Initial push of the WiFi Pineapple community packages
commit
7aacc3043f
|
@ -0,0 +1,5 @@
|
|||
# WiFi Pineapple Community Packages
|
||||
|
||||
This repository contains the OpenWrt packages for the WiFi Pineapple community repository. Packages found inside this repository will be available to download to a WiFi Pineapple via opkg.
|
||||
|
||||
To contribute, please submit a pull request.
|
|
@ -0,0 +1,51 @@
|
|||
#
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=aircrack-ng
|
||||
PKG_VERSION:=1.2-rc2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=http://download.aircrack-ng.org/ \
|
||||
http://archive.aircrack-ng.org/aircrack-ng/$(PKG_VERSION)/
|
||||
#PKG_MD5SUM:=c2f8648c92f7e46051c86c618d4fb0d5
|
||||
PKG_MD5SUM:=ebe9d537f06f4d6956213af09c4476da
|
||||
|
||||
PKG_BUILD_PARALLEL:=0
|
||||
PKG_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/aircrack-ng
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:=+libpthread +libopenssl +libpcap +libnl-tiny
|
||||
TITLE:=next generation of aircrack with new features
|
||||
URL:=http://www.aircrack-ng.org/
|
||||
SUBMENU:=wireless
|
||||
endef
|
||||
|
||||
define Package/aircrack-ng/description
|
||||
Aircrack-ng is the next generation of aircrack with new features
|
||||
endef
|
||||
|
||||
MAKE_FLAGS += \
|
||||
CFLAGS="$(TARGET_CFLAGS) -Wall -Iinclude/ $(TARGET_CPPFLAGS) -D_REVISION=0" \
|
||||
LDFLAGS="$(TARGET_LDFLAGS)" \
|
||||
OSNAME=Linux \
|
||||
prefix="/usr" \
|
||||
sqlite="false" \
|
||||
|
||||
define Package/aircrack-ng/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/* $(1)/usr/sbin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,aircrack-ng))
|
|
@ -0,0 +1,12 @@
|
|||
diff -Nur a/src/osdep/file.c b/src/osdep/file.c
|
||||
--- a/src/osdep/file.c 2014-03-22 13:26:59.000000000 -0700
|
||||
+++ b/src/osdep/file.c 2014-11-03 13:57:33.939717098 -0800
|
||||
@@ -33,7 +33,7 @@
|
||||
#include <err.h>
|
||||
|
||||
#include "osdep.h"
|
||||
-#include "pcap.h"
|
||||
+#include "../pcap.h"
|
||||
#include "radiotap/radiotap_iter.h"
|
||||
|
||||
struct priv_file {
|
|
@ -0,0 +1,77 @@
|
|||
--- a/src/besside-ng.c 2014-07-11 19:24:03.000000000 -0700
|
||||
+++ b/src/besside-ng.c 2014-12-15 09:06:29.702175482 -0800
|
||||
@@ -1178,6 +1178,9 @@
|
||||
if (!_conf.cf_do_wep && n->n_crypto == CRYPTO_WEP)
|
||||
return 0;
|
||||
|
||||
+ if (!_conf.cf_do_wpa && n->n_crypto == CRYPTO_WPA)
|
||||
+ return 0;
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -3148,6 +3151,9 @@
|
||||
" -W : WPA only\n"
|
||||
" -v : verbose, -vv for more, etc.\n"
|
||||
" -h : This help screen\n"
|
||||
+ " -w : WEP only\n"
|
||||
+ " -C <num> : Start WEP cracking at <num>\n"
|
||||
+ " ^+ Default 5000\n"
|
||||
"\n",
|
||||
getVersion("Besside-ng", _MAJ, _MIN, _SUB_MIN, _REVISION, _BETA, _RC),
|
||||
prog);
|
||||
@@ -3165,14 +3171,53 @@
|
||||
|
||||
init_conf();
|
||||
|
||||
- while ((ch = getopt(argc, argv, "hb:vWs:c:p:R:")) != -1) {
|
||||
+ while ((ch = getopt(argc, argv, "hb:vWws:c:p:R:C:")) != -1) {
|
||||
switch (ch) {
|
||||
case 's':
|
||||
_conf.cf_wpa_server = optarg;
|
||||
break;
|
||||
|
||||
case 'W':
|
||||
+ if (_conf.cf_do_wpa != 0 )
|
||||
+ {
|
||||
_conf.cf_do_wep = 0;
|
||||
+ }
|
||||
+
|
||||
+ else {
|
||||
+ printf("ERROR :Please either WEP only or WPA only, but not both.\n");
|
||||
+ printf(" :If you desire to scan both WEP & WPA, dont use either -w or -W.\n");
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ break;
|
||||
+
|
||||
+ case 'C':
|
||||
+ // Used to set the ammount of iv's required to start cracking WEP key
|
||||
+
|
||||
+
|
||||
+ _conf.cf_crack_int = (int) atoi(optarg);
|
||||
+
|
||||
+ // Check to make sure its not a null or negative number, if it is, then abort
|
||||
+ if ( (_conf.cf_crack_int) <= 0 )
|
||||
+ {
|
||||
+ printf("ERROR: Please enter a value of 1 or higher for -C.\n");
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ break;
|
||||
+
|
||||
+ case 'w':
|
||||
+ // Used to only scan for WEP networks
|
||||
+ if (_conf.cf_do_wep != 0 )
|
||||
+ {
|
||||
+ _conf.cf_do_wpa = 0;
|
||||
+ }
|
||||
+ else {
|
||||
+ printf("ERROR :Please either WEP only or WPA only, but not both.\n");
|
||||
+ printf(" :If you desire to scan both WEP & WPA, dont use either -w or -W.\n");
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
break;
|
||||
|
||||
case 'p':
|
|
@ -0,0 +1,47 @@
|
|||
diff -Nur aircrack-ng-1.2-rc2/scripts/airmon-ng aircrack-ng-1.2-rc2-patched/scripts/airmon-ng
|
||||
--- aircrack-ng-1.2-rc2/scripts/airmon-ng 2015-04-09 06:05:24.000000000 +0200
|
||||
+++ aircrack-ng-1.2-rc2-patched/scripts/airmon-ng 2015-05-07 14:04:47.195184565 +0200
|
||||
@@ -100,18 +100,19 @@
|
||||
exit 1
|
||||
fi
|
||||
|
||||
-if [ -d /proc/bus/pci ]
|
||||
-then
|
||||
- if [ ! -x "$(command -v lspci 2>&1)" ]
|
||||
- then
|
||||
- printf "Please install lspci from your distro's package manager.\n"
|
||||
- exit 1
|
||||
- else
|
||||
- LSPCI=1
|
||||
- fi
|
||||
-else
|
||||
- LSPCI=0
|
||||
-fi
|
||||
+LSPCI=0
|
||||
+#if [ -d /proc/bus/pci ]
|
||||
+#then
|
||||
+# if [ ! -x "$(command -v lspci 2>&1)" ]
|
||||
+# then
|
||||
+# printf "Please install lspci from your distro's package manager.\n"
|
||||
+# exit 1
|
||||
+# else
|
||||
+# LSPCI=1
|
||||
+# fi
|
||||
+#else
|
||||
+# LSPCI=0
|
||||
+#fi
|
||||
|
||||
if [ -f /proc/modules ]
|
||||
then
|
||||
@@ -1189,7 +1190,10 @@
|
||||
else
|
||||
ifacet="\t\t"
|
||||
fi
|
||||
- printf "${PHYDEV}\t${iface}${ifacet}${DRIVER}${DRIVERt}${CHIPSET}"
|
||||
+ if [ "$PHYDEV" != "null" ]
|
||||
+ then
|
||||
+ printf "${PHYDEV}\t${iface}${ifacet}${DRIVER}${DRIVERt}${CHIPSET}"
|
||||
+ fi
|
||||
fi
|
||||
|
||||
if [ x$MAC80211 = "x1" ]
|
|
@ -0,0 +1,50 @@
|
|||
#
|
||||
# Copyright (C) 2006-2012 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=autossh
|
||||
PKG_VERSION:=1.4b
|
||||
PKG_RELEASE:=6
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tgz
|
||||
PKG_SOURCE_URL:=http://www.harding.motd.ca/autossh/
|
||||
PKG_MD5SUM:=8f9aa006f6f69e912d3c2f504622d6f7
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/autossh
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Autossh client
|
||||
URL:=http://www.harding.motd.ca/autossh/
|
||||
SUBMENU:=SSH
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(call Build/Compile/Default, -f Makefile \
|
||||
CFLAGS="$(TARGET_CFLAGS) -Wall -D\"SSH_PATH=\\\"\$$$$(SSH)\\\"\" -D\"VER=\\\"\$$$$(VER)\\\"\"" \
|
||||
all \
|
||||
)
|
||||
endef
|
||||
|
||||
define Package/autossh/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/autossh $(1)/usr/sbin/
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/autossh.init $(1)/etc/init.d/autossh
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/autossh.config $(1)/etc/config/autossh
|
||||
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
||||
$(INSTALL_DATA) ./files/autossh.hotplug $(1)/etc/hotplug.d/iface/20-autossh
|
||||
endef
|
||||
|
||||
define Package/autossh/conffiles
|
||||
/etc/config/autossh
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,autossh))
|
|
@ -0,0 +1,5 @@
|
|||
config autossh
|
||||
option ssh '-i /etc/dropbear/id_rsa -N -T -R 2222:localhost:22 user@host'
|
||||
option gatetime '0'
|
||||
option monitorport '20000'
|
||||
option poll '600'
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/sh
|
||||
# Copyright (C) 2007 OpenWrt.org
|
||||
|
||||
/etc/init.d/autossh enabled && {
|
||||
|
||||
[ "$ACTION" = "ifup" ] && {
|
||||
/etc/init.d/autossh start
|
||||
}
|
||||
|
||||
[ "$ACTION" = "ifdown" ] && {
|
||||
/etc/init.d/autossh stop
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2007-2011 OpenWrt.org
|
||||
|
||||
START=80
|
||||
|
||||
start_instance() {
|
||||
local section="$1"
|
||||
|
||||
config_get ssh "$section" 'ssh'
|
||||
config_get gatetime "$section" 'gatetime'
|
||||
config_get monitorport "$section" 'monitorport'
|
||||
config_get poll "$section" 'poll'
|
||||
|
||||
AUTOSSH_GATETIME="${gatetime:-30}" \
|
||||
AUTOSSH_POLL="${poll:-600}" \
|
||||
service_start /usr/sbin/autossh -M ${monitorport:-20000} -f ${ssh}
|
||||
}
|
||||
|
||||
boot() {
|
||||
return
|
||||
}
|
||||
|
||||
start() {
|
||||
config_load 'autossh'
|
||||
config_foreach start_instance 'autossh'
|
||||
}
|
||||
|
||||
stop() {
|
||||
service_stop /usr/sbin/autossh
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
#
|
||||
# Copyright (C) 2006 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=dsniff
|
||||
PKG_VERSION:=2.4b1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=http://www.monkey.org/~dugsong/dsniff/beta
|
||||
PKG_MD5SUM:=2f761fa3475682a7512b0b43568ee7d6
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-2.4
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/dsniff
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:=+libpcap +libnids +libnet0 +libopenssl +libgdbm $(LIBRPC_DEPENDS)
|
||||
TITLE:=A collection of tools for network auditing and penetration testing
|
||||
URL:=http://www.monkey.org/~dugsong/dsniff/
|
||||
endef
|
||||
|
||||
define Package/dsniff/description
|
||||
A collection of tools for network auditing and penetration testing.
|
||||
endef
|
||||
|
||||
TARGET_LDFLAGS += $(LIBRPC)
|
||||
|
||||
define Build/Configure
|
||||
$(call Build/Configure/Default, \
|
||||
--with-gdbm="$(STAGING_DIR)/usr" \
|
||||
--with-libnids="$(STAGING_DIR)/usr" \
|
||||
--with-libpcap="$(STAGING_DIR)/usr" \
|
||||
--with-libnet="$(STAGING_DIR)/usr/lib/libnet-1.0.x" \
|
||||
--with-openssl="$(STAGING_DIR)/usr" \
|
||||
--without-db \
|
||||
--without-x \
|
||||
)
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(MAKE) -C $(PKG_BUILD_DIR) \
|
||||
$(TARGET_CONFIGURE_OPTS) \
|
||||
install_prefix="$(PKG_INSTALL_DIR)" \
|
||||
all install
|
||||
endef
|
||||
|
||||
define Package/dsniff/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/* $(1)/usr/sbin/
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,dsniff))
|
|
@ -0,0 +1,53 @@
|
|||
diff -urN dsniff.old/arp.c dsniff.dev/arp.c
|
||||
--- dsniff.old/arp.c 2001-03-15 09:32:58.000000000 +0100
|
||||
+++ dsniff.dev/arp.c 2006-03-03 01:41:10.000000000 +0100
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
#ifdef BSD
|
||||
int
|
||||
-arp_cache_lookup(in_addr_t ip, struct ether_addr *ether)
|
||||
+arp_cache_lookup(in_addr_t ip, struct ether_addr *ether, const char *lif)
|
||||
{
|
||||
int mib[6];
|
||||
size_t len;
|
||||
@@ -91,7 +91,7 @@
|
||||
#endif
|
||||
|
||||
int
|
||||
-arp_cache_lookup(in_addr_t ip, struct ether_addr *ether)
|
||||
+arp_cache_lookup(in_addr_t ip, struct ether_addr *ether, const char *lif)
|
||||
{
|
||||
int sock;
|
||||
struct arpreq ar;
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
memset((char *)&ar, 0, sizeof(ar));
|
||||
#ifdef __linux__
|
||||
- strncpy(ar.arp_dev, "eth0", sizeof(ar.arp_dev)); /* XXX - *sigh* */
|
||||
+ strncpy(ar.arp_dev, lif, strlen(lif));
|
||||
#endif
|
||||
sin = (struct sockaddr_in *)&ar.arp_pa;
|
||||
sin->sin_family = AF_INET;
|
||||
diff -urN dsniff.old/arp.h dsniff.dev/arp.h
|
||||
--- dsniff.old/arp.h 2001-03-15 09:27:08.000000000 +0100
|
||||
+++ dsniff.dev/arp.h 2006-03-03 01:42:23.000000000 +0100
|
||||
@@ -11,6 +11,6 @@
|
||||
#ifndef _ARP_H_
|
||||
#define _ARP_H_
|
||||
|
||||
-int arp_cache_lookup(in_addr_t ip, struct ether_addr *ether);
|
||||
+int arp_cache_lookup(in_addr_t ip, struct ether_addr *ether, const char *lif);
|
||||
|
||||
#endif /* _ARP_H_ */
|
||||
diff -urN dsniff.old/arpspoof.c dsniff.dev/arpspoof.c
|
||||
--- dsniff.old/arpspoof.c 2001-03-15 09:32:58.000000000 +0100
|
||||
+++ dsniff.dev/arpspoof.c 2006-03-03 01:42:00.000000000 +0100
|
||||
@@ -113,7 +113,7 @@
|
||||
int i = 0;
|
||||
|
||||
do {
|
||||
- if (arp_cache_lookup(ip, mac) == 0)
|
||||
+ if (arp_cache_lookup(ip, mac, intf) == 0)
|
||||
return (1);
|
||||
#ifdef __linux__
|
||||
/* XXX - force the kernel to arp. feh. */
|
|
@ -0,0 +1,122 @@
|
|||
diff --git a/decode_pop.c b/decode_pop.c
|
||||
index 04044f5..767da41 100644
|
||||
--- a/decode_pop.c
|
||||
+++ b/decode_pop.c
|
||||
@@ -6,6 +6,8 @@
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: decode_pop.c,v 1.4 2001/03/15 08:33:02 dugsong Exp $
|
||||
+ *
|
||||
+ * Rewritten by Stefan Tomanek 2011 <stefan@pico.ruhr.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
@@ -45,32 +47,88 @@ int
|
||||
decode_pop(u_char *buf, int len, u_char *obuf, int olen)
|
||||
{
|
||||
char *p;
|
||||
+ char *s;
|
||||
+ int n;
|
||||
int i, j;
|
||||
+ char *user;
|
||||
+ char *password;
|
||||
+ enum {
|
||||
+ NONE,
|
||||
+ AUTHPLAIN,
|
||||
+ AUTHLOGIN,
|
||||
+ USERPASS
|
||||
+ } mode = NONE;
|
||||
+
|
||||
|
||||
obuf[0] = '\0';
|
||||
|
||||
for (p = strtok(buf, "\r\n"); p != NULL; p = strtok(NULL, "\r\n")) {
|
||||
- if (strncasecmp(p, "AUTH PLAIN", 10) == 0 ||
|
||||
- strncasecmp(p, "AUTH LOGIN", 10) == 0) {
|
||||
- strlcat(obuf, p, olen);
|
||||
- strlcat(obuf, "\n", olen);
|
||||
-
|
||||
- /* Decode SASL auth. */
|
||||
- for (i = 0; i < 2 && (p = strtok(NULL, "\r\n")); i++) {
|
||||
- strlcat(obuf, p, olen);
|
||||
- j = base64_pton(p, p, strlen(p));
|
||||
- p[j] = '\0';
|
||||
- strlcat(obuf, " [", olen);
|
||||
- strlcat(obuf, p, olen);
|
||||
- strlcat(obuf, "]\n", olen);
|
||||
+ if (mode == NONE) {
|
||||
+ user = NULL;
|
||||
+ password = NULL;
|
||||
+ if (strncasecmp(p, "AUTH PLAIN", 10) == 0) {
|
||||
+ mode = AUTHPLAIN;
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (strncasecmp(p, "AUTH LOGIN", 10) == 0) {
|
||||
+ mode = AUTHLOGIN;
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (strncasecmp(p, "USER ", 5) == 0) {
|
||||
+ mode = USERPASS;
|
||||
+ /* the traditional login cuts right to the case,
|
||||
+ * so no continue here
|
||||
+ */
|
||||
}
|
||||
}
|
||||
- /* Save regular POP2, POP3 auth info. */
|
||||
- else if (strncasecmp(p, "USER ", 5) == 0 ||
|
||||
- strncasecmp(p, "PASS ", 5) == 0 ||
|
||||
- strncasecmp(p, "HELO ", 5) == 0) {
|
||||
- strlcat(obuf, p, olen);
|
||||
- strlcat(obuf, "\n", olen);
|
||||
+ printf("(%d) %s\n", mode, p);
|
||||
+ if (mode == USERPASS) {
|
||||
+ if (strncasecmp(p, "USER ", 5) == 0) {
|
||||
+ user = &p[5];
|
||||
+ } else if (strncasecmp(p, "PASS ", 5) == 0) {
|
||||
+ password = &p[5];
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (mode == AUTHPLAIN) {
|
||||
+ j = base64_pton(p, p, strlen(p));
|
||||
+ p[j] = '\0';
|
||||
+ n = 0;
|
||||
+ s = p;
|
||||
+ /* p consists of three parts, divided by \0 */
|
||||
+ while (s <= &p[j] && n<=3) {
|
||||
+ if (n == 0) {
|
||||
+ /* we do not process this portion yet */
|
||||
+ } else if (n == 1) {
|
||||
+ user = s;
|
||||
+ } else if (n == 2) {
|
||||
+ password = s;
|
||||
+ }
|
||||
+ n++;
|
||||
+ while (*s) s++;
|
||||
+ s++;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (mode == AUTHLOGIN) {
|
||||
+ j = base64_pton(p, p, strlen(p));
|
||||
+ p[j] = '\0';
|
||||
+ if (! user) {
|
||||
+ user = p;
|
||||
+ } else {
|
||||
+ password = p;
|
||||
+ /* got everything we need :-) */
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (user && password) {
|
||||
+ strlcat(obuf, "\nusername [", olen);
|
||||
+ strlcat(obuf, user, olen);
|
||||
+ strlcat(obuf, "] password [", olen);
|
||||
+ strlcat(obuf, password, olen);
|
||||
+ strlcat(obuf, "]\n", olen);
|
||||
+
|
||||
+ mode = NONE;
|
||||
}
|
||||
}
|
||||
return (strlen(obuf));
|
||||
|
|
@ -0,0 +1,704 @@
|
|||
diff -Nur dsniff-2.3/dns.c dsniff-2.3.patched/dns.c
|
||||
--- dsniff-2.3/dns.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ dsniff-2.3.patched/dns.c 2005-06-09 14:06:36.000000000 +0200
|
||||
@@ -0,0 +1,677 @@
|
||||
+/*
|
||||
+ * Copyright (c) 1985, 1993
|
||||
+ * The Regents of the University of California. All rights reserved.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions
|
||||
+ * are met:
|
||||
+ * 1. Redistributions of source code must retain the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer.
|
||||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer in the
|
||||
+ * documentation and/or other materials provided with the distribution.
|
||||
+ * 4. Neither the name of the University nor the names of its contributors
|
||||
+ * may be used to endorse or promote products derived from this software
|
||||
+ * without specific prior written permission.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
+ * SUCH DAMAGE.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
+ *
|
||||
+ * Permission to use, copy, modify, and distribute this software for any
|
||||
+ * purpose with or without fee is hereby granted, provided that the above
|
||||
+ * copyright notice and this permission notice appear in all copies, and that
|
||||
+ * the name of Digital Equipment Corporation not be used in advertising or
|
||||
+ * publicity pertaining to distribution of the document or software without
|
||||
+ * specific, written prior permission.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
+ * SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
|
||||
+ *
|
||||
+ * Permission to use, copy, modify, and distribute this software for any
|
||||
+ * purpose with or without fee is hereby granted, provided that the above
|
||||
+ * copyright notice and this permission notice appear in all copies.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
+ * SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||
+ *
|
||||
+ * Permission to use, copy, modify, and distribute this software for any
|
||||
+ * purpose with or without fee is hereby granted, provided that the above
|
||||
+ * copyright notice and this permission notice appear in all copies.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
+ * SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ *
|
||||
+ * DNS helper functions not implemented in uclibc
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/param.h>
|
||||
+#include <netinet/in.h>
|
||||
+#include <arpa/nameser.h>
|
||||
+#include <ctype.h>
|
||||
+#include <resolv.h>
|
||||
+#include <stdio.h>
|
||||
+#include <string.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+static const char digits[] = "0123456789";
|
||||
+
|
||||
+/* Forward. */
|
||||
+
|
||||
+static int special(int);
|
||||
+static int printable(int);
|
||||
+static int dn_find(const u_char *, const u_char *,
|
||||
+ const u_char * const *,
|
||||
+ const u_char * const *);
|
||||
+
|
||||
+
|
||||
+/*
|
||||
+ * ns_name_ntop(src, dst, dstsiz)
|
||||
+ * Convert an encoded domain name to printable ascii as per RFC1035.
|
||||
+ * return:
|
||||
+ * Number of bytes written to buffer, or -1 (with errno set)
|
||||
+ * notes:
|
||||
+ * The root is returned as "."
|
||||
+ * All other domains are returned in non absolute form
|
||||
+ */
|
||||
+int
|
||||
+ns_name_ntop(const u_char *src, char *dst, size_t dstsiz) {
|
||||
+ const u_char *cp;
|
||||
+ char *dn, *eom;
|
||||
+ u_char c;
|
||||
+ u_int n;
|
||||
+
|
||||
+ cp = src;
|
||||
+ dn = dst;
|
||||
+ eom = dst + dstsiz;
|
||||
+
|
||||
+ while ((n = *cp++) != 0) {
|
||||
+ if ((n & NS_CMPRSFLGS) != 0) {
|
||||
+ /* Some kind of compression pointer. */
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ if (dn != dst) {
|
||||
+ if (dn >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *dn++ = '.';
|
||||
+ }
|
||||
+ if (dn + n >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ for ((void)NULL; n > 0; n--) {
|
||||
+ c = *cp++;
|
||||
+ if (special(c)) {
|
||||
+ if (dn + 1 >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *dn++ = '\\';
|
||||
+ *dn++ = (char)c;
|
||||
+ } else if (!printable(c)) {
|
||||
+ if (dn + 3 >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *dn++ = '\\';
|
||||
+ *dn++ = digits[c / 100];
|
||||
+ *dn++ = digits[(c % 100) / 10];
|
||||
+ *dn++ = digits[c % 10];
|
||||
+ } else {
|
||||
+ if (dn >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *dn++ = (char)c;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if (dn == dst) {
|
||||
+ if (dn >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *dn++ = '.';
|
||||
+ }
|
||||
+ if (dn >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *dn++ = '\0';
|
||||
+ return (dn - dst);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ns_name_pton(src, dst, dstsiz)
|
||||
+ * Convert a ascii string into an encoded domain name as per RFC1035.
|
||||
+ * return:
|
||||
+ * -1 if it fails
|
||||
+ * 1 if string was fully qualified
|
||||
+ * 0 is string was not fully qualified
|
||||
+ * notes:
|
||||
+ * Enforces label and domain length limits.
|
||||
+ */
|
||||
+
|
||||
+int
|
||||
+ns_name_pton(const char *src, u_char *dst, size_t dstsiz) {
|
||||
+ u_char *label, *bp, *eom;
|
||||
+ int c, n, escaped;
|
||||
+ char *cp;
|
||||
+
|
||||
+ escaped = 0;
|
||||
+ bp = dst;
|
||||
+ eom = dst + dstsiz;
|
||||
+ label = bp++;
|
||||
+
|
||||
+ while ((c = *src++) != 0) {
|
||||
+ if (escaped) {
|
||||
+ if ((cp = strchr(digits, c)) != NULL) {
|
||||
+ n = (cp - digits) * 100;
|
||||
+ if ((c = *src++) == 0 ||
|
||||
+ (cp = strchr(digits, c)) == NULL) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ n += (cp - digits) * 10;
|
||||
+ if ((c = *src++) == 0 ||
|
||||
+ (cp = strchr(digits, c)) == NULL) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ n += (cp - digits);
|
||||
+ if (n > 255) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ c = n;
|
||||
+ }
|
||||
+ escaped = 0;
|
||||
+ } else if (c == '\\') {
|
||||
+ escaped = 1;
|
||||
+ continue;
|
||||
+ } else if (c == '.') {
|
||||
+ c = (bp - label - 1);
|
||||
+ if ((c & NS_CMPRSFLGS) != 0) { /* Label too big. */
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ if (label >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *label = c;
|
||||
+ /* Fully qualified ? */
|
||||
+ if (*src == '\0') {
|
||||
+ if (c != 0) {
|
||||
+ if (bp >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *bp++ = '\0';
|
||||
+ }
|
||||
+ if ((bp - dst) > MAXCDNAME) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ return (1);
|
||||
+ }
|
||||
+ if (c == 0 || *src == '.') {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ label = bp++;
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (bp >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *bp++ = (u_char)c;
|
||||
+ }
|
||||
+ c = (bp - label - 1);
|
||||
+ if ((c & NS_CMPRSFLGS) != 0) { /* Label too big. */
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ if (label >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *label = c;
|
||||
+ if (c != 0) {
|
||||
+ if (bp >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *bp++ = 0;
|
||||
+ }
|
||||
+ if ((bp - dst) > MAXCDNAME) { /* src too big */
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ return (0);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ns_name_ntol(src, dst, dstsiz)
|
||||
+ * Convert a network strings labels into all lowercase.
|
||||
+ * return:
|
||||
+ * Number of bytes written to buffer, or -1 (with errno set)
|
||||
+ * notes:
|
||||
+ * Enforces label and domain length limits.
|
||||
+ */
|
||||
+
|
||||
+int
|
||||
+ns_name_ntol(const u_char *src, u_char *dst, size_t dstsiz) {
|
||||
+ const u_char *cp;
|
||||
+ u_char *dn, *eom;
|
||||
+ u_char c;
|
||||
+ u_int n;
|
||||
+
|
||||
+ cp = src;
|
||||
+ dn = dst;
|
||||
+ eom = dst + dstsiz;
|
||||
+
|
||||
+ while ((n = *cp++) != 0) {
|
||||
+ if ((n & NS_CMPRSFLGS) != 0) {
|
||||
+ /* Some kind of compression pointer. */
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ *dn++ = n;
|
||||
+ if (dn + n >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ for ((void)NULL; n > 0; n--) {
|
||||
+ c = *cp++;
|
||||
+ if (isupper(c))
|
||||
+ *dn++ = tolower(c);
|
||||
+ else
|
||||
+ *dn++ = c;
|
||||
+ }
|
||||
+ }
|
||||
+ *dn++ = '\0';
|
||||
+ return (dn - dst);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ns_name_unpack(msg, eom, src, dst, dstsiz)
|
||||
+ * Unpack a domain name from a message, source may be compressed.
|
||||
+ * return:
|
||||
+ * -1 if it fails, or consumed octets if it succeeds.
|
||||
+ */
|
||||
+int
|
||||
+ns_name_unpack(const u_char *msg, const u_char *eom, const u_char *src,
|
||||
+ u_char *dst, size_t dstsiz)
|
||||
+{
|
||||
+ const u_char *srcp, *dstlim;
|
||||
+ u_char *dstp;
|
||||
+ int n, len, checked;
|
||||
+
|
||||
+ len = -1;
|
||||
+ checked = 0;
|
||||
+ dstp = dst;
|
||||
+ srcp = src;
|
||||
+ dstlim = dst + dstsiz;
|
||||
+ if (srcp < msg || srcp >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ /* Fetch next label in domain name. */
|
||||
+ while ((n = *srcp++) != 0) {
|
||||
+ /* Check for indirection. */
|
||||
+ switch (n & NS_CMPRSFLGS) {
|
||||
+ case 0:
|
||||
+ /* Limit checks. */
|
||||
+ if (dstp + n + 1 >= dstlim || srcp + n >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ checked += n + 1;
|
||||
+ *dstp++ = n;
|
||||
+ memcpy(dstp, srcp, n);
|
||||
+ dstp += n;
|
||||
+ srcp += n;
|
||||
+ break;
|
||||
+
|
||||
+ case NS_CMPRSFLGS:
|
||||
+ if (srcp >= eom) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ if (len < 0)
|
||||
+ len = srcp - src + 1;
|
||||
+ srcp = msg + (((n & 0x3f) << 8) | (*srcp & 0xff));
|
||||
+ if (srcp < msg || srcp >= eom) { /* Out of range. */
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ checked += 2;
|
||||
+ /*
|
||||
+ * Check for loops in the compressed name;
|
||||
+ * if we've looked at the whole message,
|
||||
+ * there must be a loop.
|
||||
+ */
|
||||
+ if (checked >= eom - msg) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ return (-1); /* flag error */
|
||||
+ }
|
||||
+ }
|
||||
+ *dstp = '\0';
|
||||
+ if (len < 0)
|
||||
+ len = srcp - src;
|
||||
+ return (len);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ns_name_pack(src, dst, dstsiz, dnptrs, lastdnptr)
|
||||
+ * Pack domain name 'domain' into 'comp_dn'.
|
||||
+ * return:
|
||||
+ * Size of the compressed name, or -1.
|
||||
+ * notes:
|
||||
+ * 'dnptrs' is an array of pointers to previous compressed names.
|
||||
+ * dnptrs[0] is a pointer to the beginning of the message. The array
|
||||
+ * ends with NULL.
|
||||
+ * 'lastdnptr' is a pointer to the end of the array pointed to
|
||||
+ * by 'dnptrs'.
|
||||
+ * Side effects:
|
||||
+ * The list of pointers in dnptrs is updated for labels inserted into
|
||||
+ * the message as we compress the name. If 'dnptr' is NULL, we don't
|
||||
+ * try to compress names. If 'lastdnptr' is NULL, we don't update the
|
||||
+ * list.
|
||||
+ */
|
||||
+int
|
||||
+ns_name_pack(const u_char *src, u_char *dst, int dstsiz,
|
||||
+ const u_char **dnptrs, const u_char **lastdnptr)
|
||||
+{
|
||||
+ u_char *dstp;
|
||||
+ const u_char **cpp, **lpp, *eob, *msg;
|
||||
+ const u_char *srcp;
|
||||
+ int n, l, first = 1;
|
||||
+
|
||||
+ srcp = src;
|
||||
+ dstp = dst;
|
||||
+ eob = dstp + dstsiz;
|
||||
+ lpp = cpp = NULL;
|
||||
+ if (dnptrs != NULL) {
|
||||
+ if ((msg = *dnptrs++) != NULL) {
|
||||
+ for (cpp = dnptrs; *cpp != NULL; cpp++)
|
||||
+ (void)NULL;
|
||||
+ lpp = cpp; /* end of list to search */
|
||||
+ }
|
||||
+ } else
|
||||
+ msg = NULL;
|
||||
+
|
||||
+ /* make sure the domain we are about to add is legal */
|
||||
+ l = 0;
|
||||
+ do {
|
||||
+ n = *srcp;
|
||||
+ if ((n & NS_CMPRSFLGS) != 0) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ l += n + 1;
|
||||
+ if (l > MAXCDNAME) {
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ srcp += n + 1;
|
||||
+ } while (n != 0);
|
||||
+
|
||||
+ /* from here on we need to reset compression pointer array on error */
|
||||
+ srcp = src;
|
||||
+ do {
|
||||
+ /* Look to see if we can use pointers. */
|
||||
+ n = *srcp;
|
||||
+ if (n != 0 && msg != NULL) {
|
||||
+ l = dn_find(srcp, msg, (const u_char * const *)dnptrs,
|
||||
+ (const u_char * const *)lpp);
|
||||
+ if (l >= 0) {
|
||||
+ if (dstp + 1 >= eob) {
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ *dstp++ = (l >> 8) | NS_CMPRSFLGS;
|
||||
+ *dstp++ = l % 256;
|
||||
+ return (dstp - dst);
|
||||
+ }
|
||||
+ /* Not found, save it. */
|
||||
+ if (lastdnptr != NULL && cpp < lastdnptr - 1 &&
|
||||
+ (dstp - msg) < 0x4000 && first) {
|
||||
+ *cpp++ = dstp;
|
||||
+ *cpp = NULL;
|
||||
+ first = 0;
|
||||
+ }
|
||||
+ }
|
||||
+ /* copy label to buffer */
|
||||
+ if (n & NS_CMPRSFLGS) { /* Should not happen. */
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ if (dstp + 1 + n >= eob) {
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ memcpy(dstp, srcp, n + 1);
|
||||
+ srcp += n + 1;
|
||||
+ dstp += n + 1;
|
||||
+ } while (n != 0);
|
||||
+
|
||||
+ if (dstp > eob) {
|
||||
+cleanup:
|
||||
+ if (msg != NULL)
|
||||
+ *lpp = NULL;
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ return (dstp - dst);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ns_name_uncompress(msg, eom, src, dst, dstsiz)
|
||||
+ * Expand compressed domain name to presentation format.
|
||||
+ * return:
|
||||
+ * Number of bytes read out of `src', or -1 (with errno set).
|
||||
+ * note:
|
||||
+ * Root domain returns as "." not "".
|
||||
+ */
|
||||
+int
|
||||
+ns_name_uncompress(const u_char *msg, const u_char *eom, const u_char *src,
|
||||
+ char *dst, size_t dstsiz)
|
||||
+{
|
||||
+ u_char tmp[NS_MAXCDNAME];
|
||||
+ int n;
|
||||
+
|
||||
+ if ((n = ns_name_unpack(msg, eom, src, tmp, sizeof tmp)) == -1)
|
||||
+ return (-1);
|
||||
+ if (ns_name_ntop(tmp, dst, dstsiz) == -1)
|
||||
+ return (-1);
|
||||
+ return (n);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ns_name_compress(src, dst, dstsiz, dnptrs, lastdnptr)
|
||||
+ * Compress a domain name into wire format, using compression pointers.
|
||||
+ * return:
|
||||
+ * Number of bytes consumed in `dst' or -1 (with errno set).
|
||||
+ * notes:
|
||||
+ * 'dnptrs' is an array of pointers to previous compressed names.
|
||||
+ * dnptrs[0] is a pointer to the beginning of the message.
|
||||
+ * The list ends with NULL. 'lastdnptr' is a pointer to the end of the
|
||||
+ * array pointed to by 'dnptrs'. Side effect is to update the list of
|
||||
+ * pointers for labels inserted into the message as we compress the name.
|
||||
+ * If 'dnptr' is NULL, we don't try to compress names. If 'lastdnptr'
|
||||
+ * is NULL, we don't update the list.
|
||||
+ */
|
||||
+int
|
||||
+ns_name_compress(const char *src, u_char *dst, size_t dstsiz,
|
||||
+ const u_char **dnptrs, const u_char **lastdnptr)
|
||||
+{
|
||||
+ u_char tmp[NS_MAXCDNAME];
|
||||
+
|
||||
+ if (ns_name_pton(src, tmp, sizeof tmp) == -1)
|
||||
+ return (-1);
|
||||
+ return (ns_name_pack(tmp, dst, dstsiz, dnptrs, lastdnptr));
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * special(ch)
|
||||
+ * Thinking in noninternationalized USASCII (per the DNS spec),
|
||||
+ * is this characted special ("in need of quoting") ?
|
||||
+ * return:
|
||||
+ * boolean.
|
||||
+ */
|
||||
+static int
|
||||
+special(int ch) {
|
||||
+ switch (ch) {
|
||||
+ case 0x22: /* '"' */
|
||||
+ case 0x2E: /* '.' */
|
||||
+ case 0x3B: /* ';' */
|
||||
+ case 0x5C: /* '\\' */
|
||||
+ /* Special modifiers in zone files. */
|
||||
+ case 0x40: /* '@' */
|
||||
+ case 0x24: /* '$' */
|
||||
+ return (1);
|
||||
+ default:
|
||||
+ return (0);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * printable(ch)
|
||||
+ * Thinking in noninternationalized USASCII (per the DNS spec),
|
||||
+ * is this character visible and not a space when printed ?
|
||||
+ * return:
|
||||
+ * boolean.
|
||||
+ */
|
||||
+static int
|
||||
+printable(int ch) {
|
||||
+ return (ch > 0x20 && ch < 0x7f);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Thinking in noninternationalized USASCII (per the DNS spec),
|
||||
+ * convert this character to lower case if it's upper case.
|
||||
+ */
|
||||
+static int
|
||||
+mklower(int ch) {
|
||||
+ if (ch >= 0x41 && ch <= 0x5A)
|
||||
+ return (ch + 0x20);
|
||||
+ return (ch);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * dn_find(domain, msg, dnptrs, lastdnptr)
|
||||
+ * Search for the counted-label name in an array of compressed names.
|
||||
+ * return:
|
||||
+ * offset from msg if found, or -1.
|
||||
+ * notes:
|
||||
+ * dnptrs is the pointer to the first name on the list,
|
||||
+ * not the pointer to the start of the message.
|
||||
+ */
|
||||
+static int
|
||||
+dn_find(const u_char *domain, const u_char *msg,
|
||||
+ const u_char * const *dnptrs,
|
||||
+ const u_char * const *lastdnptr)
|
||||
+{
|
||||
+ const u_char *dn, *cp, *sp;
|
||||
+ const u_char * const *cpp;
|
||||
+ u_int n;
|
||||
+
|
||||
+ for (cpp = dnptrs; cpp < lastdnptr; cpp++) {
|
||||
+ sp = *cpp;
|
||||
+ /*
|
||||
+ * terminate search on:
|
||||
+ * root label
|
||||
+ * compression pointer
|
||||
+ * unusable offset
|
||||
+ */
|
||||
+ while (*sp != 0 && (*sp & NS_CMPRSFLGS) == 0 &&
|
||||
+ (sp - msg) < 0x4000) {
|
||||
+ dn = domain;
|
||||
+ cp = sp;
|
||||
+ while ((n = *cp++) != 0) {
|
||||
+ /*
|
||||
+ * check for indirection
|
||||
+ */
|
||||
+ switch (n & NS_CMPRSFLGS) {
|
||||
+ case 0: /* normal case, n == len */
|
||||
+ if (n != *dn++)
|
||||
+ goto next;
|
||||
+ for ((void)NULL; n > 0; n--)
|
||||
+ if (mklower(*dn++) !=
|
||||
+ mklower(*cp++))
|
||||
+ goto next;
|
||||
+ /* Is next root for both ? */
|
||||
+ if (*dn == '\0' && *cp == '\0')
|
||||
+ return (sp - msg);
|
||||
+ if (*dn)
|
||||
+ continue;
|
||||
+ goto next;
|
||||
+
|
||||
+ case NS_CMPRSFLGS: /* indirection */
|
||||
+ cp = msg + (((n & 0x3f) << 8) | *cp);
|
||||
+ break;
|
||||
+
|
||||
+ default: /* illegal type */
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ }
|
||||
+ next:
|
||||
+ sp += *sp + 1;
|
||||
+ }
|
||||
+ }
|
||||
+ return (-1);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Expand compressed domain name 'comp_dn' to full domain name.
|
||||
+ * 'msg' is a pointer to the begining of the message,
|
||||
+ * 'eomorig' points to the first location after the message,
|
||||
+ * 'exp_dn' is a pointer to a buffer of size 'length' for the result.
|
||||
+ * Return size of compressed name or -1 if there was an error.
|
||||
+ */
|
||||
+int
|
||||
+dn_expand(const u_char *msg, const u_char *eom, const u_char *src,
|
||||
+ char *dst, int dstsiz)
|
||||
+{
|
||||
+ int n = ns_name_uncompress(msg, eom, src, dst, (size_t)dstsiz);
|
||||
+
|
||||
+ if (n > 0 && dst[0] == '.')
|
||||
+ dst[0] = '\0';
|
||||
+ return (n);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Pack domain name 'exp_dn' in presentation form into 'comp_dn'.
|
||||
+ * Return the size of the compressed name or -1.
|
||||
+ * 'length' is the size of the array pointed to by 'comp_dn'.
|
||||
+ */
|
||||
+int
|
||||
+dn_comp(const char *src, u_char *dst, int dstsiz,
|
||||
+ u_char **dnptrs, u_char **lastdnptr)
|
||||
+{
|
||||
+ return (ns_name_compress(src, dst, (size_t)dstsiz,
|
||||
+ (const u_char **)dnptrs,
|
||||
+ (const u_char **)lastdnptr));
|
||||
+}
|
||||
+
|
||||
diff -Nur dsniff-2.3/Makefile.in dsniff-2.3.patched/Makefile.in
|
||||
--- dsniff-2.3/Makefile.in 2000-12-15 21:03:26.000000000 +0100
|
||||
+++ dsniff-2.3.patched/Makefile.in 2005-06-09 14:03:18.000000000 +0200
|
||||
@@ -51,7 +51,7 @@
|
||||
pathnames.h pcaputil.h record.h rpc.h tcp_raw.h trigger.h \
|
||||
version.h vroot.h
|
||||
|
||||
-SRCS = asn1.c base64.c buf.c hex.c magic.c mount.c pcaputil.c rpc.c \
|
||||
+SRCS = asn1.c base64.c buf.c dns.c hex.c magic.c mount.c pcaputil.c rpc.c \
|
||||
tcp_raw.c trigger.c record.c dsniff.c decode.c decode_aim.c \
|
||||
decode_citrix.c decode_cvs.c decode_ftp.c decode_hex.c \
|
||||
decode_http.c decode_icq.c decode_imap.c decode_irc.c \
|
||||
@@ -99,8 +99,8 @@
|
||||
arpspoof: arpspoof.o arp.o
|
||||
$(CC) $(LDFLAGS) -o $@ arpspoof.o arp.o $(LIBS) $(PCAPLIB) $(LNETLIB)
|
||||
|
||||
-dnsspoof: dnsspoof.o pcaputil.o
|
||||
- $(CC) $(LDFLAGS) -o $@ dnsspoof.o pcaputil.o $(LIBS) $(PCAPLIB) $(LNETLIB)
|
||||
+dnsspoof: dnsspoof.o pcaputil.o dns.o
|
||||
+ $(CC) $(LDFLAGS) -o $@ dnsspoof.o pcaputil.o dns.o $(LIBS) $(PCAPLIB) $(LNETLIB)
|
||||
|
||||
filesnarf: nfs_prot.o filesnarf.o pcaputil.o rpc.o
|
||||
$(CC) $(LDFLAGS) -o $@ filesnarf.o nfs_prot.o pcaputil.o rpc.o $(LIBS) $(NIDSLIB) $(PCAPLIB) $(LNETLIB)
|
|
@ -0,0 +1,206 @@
|
|||
Index: dsniff-2.4/configure
|
||||
===================================================================
|
||||
--- dsniff-2.4.orig/configure 2010-11-03 23:42:49.466000001 +0100
|
||||
+++ dsniff-2.4/configure 2010-11-03 23:42:52.921000006 +0100
|
||||
@@ -16,6 +16,8 @@
|
||||
ac_help="$ac_help
|
||||
--with-db=DIR use Berkeley DB (with --enable-compat185) in DIR"
|
||||
ac_help="$ac_help
|
||||
+ --with-gdbm=DIR use GNU DBM in DIR"
|
||||
+ac_help="$ac_help
|
||||
--with-libpcap=DIR use libpcap in DIR"
|
||||
ac_help="$ac_help
|
||||
--with-libnet=DIR use libnet in DIR"
|
||||
@@ -3059,7 +3061,40 @@
|
||||
|
||||
fi
|
||||
|
||||
+echo $ac_n "checking for libgdbm""... $ac_c" 1>&6
|
||||
+echo "configure:3059: checking for libgdbm" >&5
|
||||
+# Check whether --with-gdbm or --without-gdbm was given.
|
||||
+if test "${with_gdbm+set}" = set; then
|
||||
+ withval="$with_gdbm"
|
||||
+ case "$withval" in
|
||||
+ yes|no)
|
||||
+ echo "$ac_t""no" 1>&6
|
||||
+ ;;
|
||||
+ *)
|
||||
+ echo "$ac_t""$withval" 1>&6
|
||||
+ if test -f $withval/include/gdbm.h -a -f $withval/lib/libgdbm.a; then
|
||||
+ owd=`pwd`
|
||||
+ if cd $withval; then withval=`pwd`; cd $owd; fi
|
||||
+ DBINC="-I$withval/include"
|
||||
+ DBLIB="-L$withval/lib -lgdbm"
|
||||
+ else
|
||||
+ { echo "configure: error: gdbm.h or libgdbm.a not found in $withval" 1>&2; exit 1; }
|
||||
+ fi
|
||||
+ ;;
|
||||
+ esac
|
||||
+else
|
||||
+ if test -f ${prefix}/include/gdbm.h; then
|
||||
+ LNETINC="-I${prefix}/include"
|
||||
+ LNETLIB="-L${prefix}/lib -lgdbm"
|
||||
+ elif test -f /usr/include/gdbm.h; then
|
||||
+ LNETLIB="-lgdbm"
|
||||
+ else
|
||||
+ echo "$ac_t""no" 1>&6
|
||||
+ { echo "configure: error: libgdbm not found" 1>&2; exit 1; }
|
||||
+ fi
|
||||
+ echo "$ac_t""yes" 1>&6
|
||||
|
||||
+fi
|
||||
|
||||
|
||||
echo $ac_n "checking for libnet""... $ac_c" 1>&6
|
||||
Index: dsniff-2.4/record.c
|
||||
===================================================================
|
||||
--- dsniff-2.4.orig/record.c 2010-11-03 23:42:49.471000001 +0100
|
||||
+++ dsniff-2.4/record.c 2010-11-03 23:42:52.922000005 +0100
|
||||
@@ -15,12 +15,7 @@
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <md5.h>
|
||||
-#ifdef HAVE_DB_185_H
|
||||
-#define DB_LIBRARY_COMPATIBILITY_API
|
||||
-#include <db_185.h>
|
||||
-#elif HAVE_DB_H
|
||||
-#include <db.h>
|
||||
-#endif
|
||||
+#include <gdbm.h>
|
||||
#include <libnet.h>
|
||||
|
||||
#include "options.h"
|
||||
@@ -37,7 +32,7 @@
|
||||
struct netobj data;
|
||||
};
|
||||
|
||||
-static DB *db;
|
||||
+GDBM_FILE dbf;
|
||||
|
||||
static int
|
||||
xdr_rec(XDR *xdrs, struct rec *rec)
|
||||
@@ -64,7 +59,6 @@
|
||||
|
||||
tm = localtime(&rec->time);
|
||||
strftime(tstr, sizeof(tstr), "%x %X", tm);
|
||||
-
|
||||
srcp = libnet_host_lookup(rec->src, Opt_dns);
|
||||
dstp = libnet_host_lookup(rec->dst, Opt_dns);
|
||||
|
||||
@@ -89,10 +83,10 @@
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
-static DBT *
|
||||
+static datum
|
||||
record_hash(struct rec *rec)
|
||||
{
|
||||
- static DBT key;
|
||||
+ static datum key;
|
||||
static u_char hash[16];
|
||||
MD5_CTX ctx;
|
||||
|
||||
@@ -105,16 +99,16 @@
|
||||
MD5Update(&ctx, rec->data.n_bytes, rec->data.n_len);
|
||||
MD5Final(hash, &ctx);
|
||||
|
||||
- key.data = hash;
|
||||
- key.size = sizeof(hash);
|
||||
+ key.dptr = hash;
|
||||
+ key.dsize = sizeof(hash);
|
||||
|
||||
- return (&key);
|
||||
+ return (key);
|
||||
}
|
||||
|
||||
static int
|
||||
record_save(struct rec *rec)
|
||||
{
|
||||
- DBT *key, data;
|
||||
+ datum key, data;
|
||||
XDR xdrs;
|
||||
u_char buf[2048];
|
||||
|
||||
@@ -123,15 +117,15 @@
|
||||
if (!xdr_rec(&xdrs, rec))
|
||||
return (0);
|
||||
|
||||
- data.data = buf;
|
||||
- data.size = xdr_getpos(&xdrs);
|
||||
+ data.dptr = buf;
|
||||
+ data.dsize = xdr_getpos(&xdrs);
|
||||
|
||||
xdr_destroy(&xdrs);
|
||||
|
||||
key = record_hash(rec);
|
||||
|
||||
- if (db->put(db, key, &data, R_NOOVERWRITE) == 0)
|
||||
- db->sync(db, 0);
|
||||
+ if (gdbm_store(dbf, key, data, GDBM_INSERT) == 0)
|
||||
+ gdbm_sync(dbf);
|
||||
|
||||
return (1);
|
||||
}
|
||||
@@ -139,18 +133,22 @@
|
||||
void
|
||||
record_dump(void)
|
||||
{
|
||||
- DBT key, data;
|
||||
+ datum nextkey, key, content;
|
||||
XDR xdrs;
|
||||
struct rec rec;
|
||||
|
||||
- while (db->seq(db, &key, &data, R_NEXT) == 0) {
|
||||
+ key = gdbm_firstkey(dbf);
|
||||
+ while (key.dptr) {
|
||||
+ nextkey = gdbm_nextkey(dbf, key);
|
||||
+ content = gdbm_fetch(dbf, key);
|
||||
memset(&rec, 0, sizeof(rec));
|
||||
- xdrmem_create(&xdrs, data.data, data.size, XDR_DECODE);
|
||||
-
|
||||
+ xdrmem_create(&xdrs, content.dptr, content.dsize, XDR_DECODE);
|
||||
if (xdr_rec(&xdrs, &rec)) {
|
||||
record_print(&rec);
|
||||
}
|
||||
xdr_destroy(&xdrs);
|
||||
+ free(key.dptr);
|
||||
+ key = nextkey;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,16 +156,23 @@
|
||||
record_init(char *file)
|
||||
{
|
||||
int flags, mode;
|
||||
-
|
||||
+ // needed for gdbm_open, which does not have the option to create
|
||||
+ // a database in memory
|
||||
+ if(file == NULL) {
|
||||
+ char *record_file = "/tmp/.dsniff.db";
|
||||
+ file = record_file;
|
||||
+ }
|
||||
+
|
||||
if (Opt_read) {
|
||||
- flags = O_RDONLY;
|
||||
+ flags = GDBM_READER;
|
||||
mode = 0;
|
||||
}
|
||||
else {
|
||||
- flags = O_RDWR|O_CREAT;
|
||||
+ flags = GDBM_WRCREAT;
|
||||
mode = S_IRUSR|S_IWUSR;
|
||||
}
|
||||
- if ((db = dbopen(file, flags, mode, DB_BTREE, NULL)) == NULL)
|
||||
+
|
||||
+ if ((dbf = gdbm_open(file, 1024, flags, mode, NULL)) == NULL)
|
||||
return (0);
|
||||
|
||||
return (1);
|
||||
@@ -206,6 +211,6 @@
|
||||
void
|
||||
record_close(void)
|
||||
{
|
||||
- db->close(db);
|
||||
+ gdbm_close(dbf);
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
Index: dsniff-2.4/decode.c
|
||||
===================================================================
|
||||
--- dsniff-2.4.orig/decode.c 2010-11-03 23:42:49.419000001 +0100
|
||||
+++ dsniff-2.4/decode.c 2010-11-03 23:42:56.481000002 +0100
|
||||
@@ -51,8 +51,6 @@
|
||||
extern int decode_portmap(u_char *, int, u_char *, int);
|
||||
extern int decode_mountd(u_char *, int, u_char *, int);
|
||||
extern int decode_vrrp(u_char *, int, u_char *, int);
|
||||
-extern int decode_ypserv(u_char *, int, u_char *, int);
|
||||
-extern int decode_yppasswd(u_char *, int, u_char *, int);
|
||||
|
||||
static struct decode decodes[] = {
|
||||
{ "hex", decode_hex },
|
||||
@@ -88,8 +86,6 @@
|
||||
{ "irc", decode_irc },
|
||||
{ "portmap", decode_portmap },
|
||||
{ "mountd", decode_mountd },
|
||||
- { "ypserv", decode_ypserv },
|
||||
- { "yppasswd", decode_yppasswd },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
Index: dsniff-2.4/dsniff.services
|
||||
===================================================================
|
||||
--- dsniff-2.4.orig/dsniff.services 2010-11-03 23:42:49.429000001 +0100
|
||||
+++ dsniff-2.4/dsniff.services 2010-11-03 23:42:56.481000002 +0100
|
||||
@@ -66,5 +66,3 @@
|
||||
aim 9898/tcp
|
||||
pcanywhere 65301/tcp
|
||||
mountd 100005/rpc
|
||||
-ypserv 100004/rpc
|
||||
-yppasswd 100009/rpc
|
||||
Index: dsniff-2.4/Makefile.in
|
||||
===================================================================
|
||||
--- dsniff-2.4.orig/Makefile.in 2010-11-03 23:42:51.736998874 +0100
|
||||
+++ dsniff-2.4/Makefile.in 2010-11-03 23:42:56.481000002 +0100
|
||||
@@ -60,7 +60,7 @@
|
||||
decode_pop.c decode_portmap.c decode_postgresql.c decode_pptp.c \
|
||||
decode_rip.c decode_rlogin.c decode_smb.c decode_smtp.c \
|
||||
decode_sniffer.c decode_snmp.c decode_socks.c decode_tds.c \
|
||||
- decode_telnet.c decode_vrrp.c decode_yp.c decode_x11.c
|
||||
+ decode_telnet.c decode_vrrp.c decode_x11.c
|
||||
|
||||
GEN = mount.h mount.c nfs_prot.h nfs_prot.c
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
--- dsniff-2.4b1.orig/sshcrypto.c
|
||||
+++ dsniff-2.4b1/sshcrypto.c
|
||||
@@ -14,6 +14,8 @@
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <openssl/ssl.h>
|
||||
+#include <openssl/blowfish.h>
|
||||
+#include <openssl/des.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
|
@ -0,0 +1,13 @@
|
|||
Index: dsniff-2.4/configure
|
||||
===================================================================
|
||||
--- dsniff-2.4.orig/configure 2010-11-03 23:42:52.921000006 +0100
|
||||
+++ dsniff-2.4/configure 2010-11-03 23:43:00.504000001 +0100
|
||||
@@ -3033,7 +3033,7 @@
|
||||
PCAPINC="-I$withval -I$withval/bpf"
|
||||
PCAPLIB="-L$withval -lpcap"
|
||||
elif test -f $withval/include/pcap.h -a \
|
||||
- -f $withval/include/net/bpf.h -a \
|
||||
+ -f $withval/include/pcap-bpf.h -a \
|
||||
-f $withval/lib/libpcap.a; then
|
||||
owd=`pwd`
|
||||
if cd $withval; then withval=`pwd`; cd $owd; fi
|
|
@ -0,0 +1,22 @@
|
|||
diff -urNad --exclude=CVS --exclude=.svn dsniff-2.4b1/msgsnarf.c dsniff-2.4b1/msgsnarf.c
|
||||
--- dsniff-2.4b1/msgsnarf.c 2001-03-15 08:33:04.000000000 +0000
|
||||
+++ dsniff-2.4b1/msgsnarf.c 2005-07-11 20:15:50.000000000 +0000
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <nids.h>
|
||||
#include <pcap.h>
|
||||
#include <pcaputil.h>
|
||||
+#include <time.h>
|
||||
|
||||
#include "buf.h"
|
||||
#include "decode.h"
|
||||
diff -urNad --exclude=CVS --exclude=.svn dsniff-2.4b1/sshow.c dsniff-2.4b1/sshow.c
|
||||
--- dsniff-2.4b1/sshow.c 2005-07-11 20:14:19.000000000 +0000
|
||||
+++ dsniff-2.4b1/sshow.c 2005-07-11 20:15:26.000000000 +0000
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/times.h>
|
||||
+#include <time.h>
|
||||
|
||||
#include <netinet/in_systm.h>
|
||||
#include <netinet/in.h>
|
|
@ -0,0 +1,13 @@
|
|||
Index: dsniff-2.4/record.c
|
||||
===================================================================
|
||||
--- dsniff-2.4.orig/record.c 2010-11-03 23:43:14.268000004 +0100
|
||||
+++ dsniff-2.4/record.c 2010-11-03 23:43:16.947000004 +0100
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
-#include <md5.h>
|
||||
+#include "missing/md5.h"
|
||||
#include <gdbm.h>
|
||||
#include <libnet.h>
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
Index: dsniff-2.4/sshow.c
|
||||
===================================================================
|
||||
--- dsniff-2.4.orig/sshow.c 2010-11-03 23:41:56.335999997 +0100
|
||||
+++ dsniff-2.4/sshow.c 2010-11-03 23:42:10.981000001 +0100
|
||||
@@ -42,6 +42,10 @@
|
||||
|
||||
#define HISTORY_SIZE 16
|
||||
|
||||
+#ifndef CLK_TCK
|
||||
+# define CLK_TCK CLOCKS_PER_SEC
|
||||
+#endif
|
||||
+
|
||||
typedef struct {
|
||||
u_int min, max;
|
||||
} range;
|
|
@ -0,0 +1,69 @@
|
|||
#
|
||||
# Copyright (C) 2006-2010 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ettercap
|
||||
PKG_VERSION:=0.8.2
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/Ettercap/ettercap/releases/download/v0.8.2/
|
||||
PKG_MD5SUM:=b6b20851862f55644d5f296f77b785d1
|
||||
|
||||
PKG_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
# include $(INCLUDE_DIR)/nls.mk
|
||||
|
||||
define Package/ettercap
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:=+libcurl +libpcap +libnet1 +libopenssl +libpcre +libncurses +libltdl +libpthread +zlib +libiconv-full
|
||||
TITLE:=Ettercap is a suite for man in the middle attacks on LAN.
|
||||
URL:=http://www.ettercap-project.org
|
||||
endef
|
||||
|
||||
define Package/ettercap/description
|
||||
It features sniffing of live connections, content filtering on the fly
|
||||
and many other interesting tricks.
|
||||
It supports active and passive dissection of many protocols (even
|
||||
ciphered ones) and includes many feature for network and host analysis.
|
||||
endef
|
||||
|
||||
define Package/ettercap/conffiles
|
||||
/etc/etter.conf
|
||||
endef
|
||||
|
||||
TARGET_CFLAGS += -I$(STAGING_DIR)/usr/lib/libiconv-full/include
|
||||
|
||||
#IPV6 -> LIBNET needed?
|
||||
CMAKE_OPTIONS += \
|
||||
-DHAVE_UTF8:BOOL=OFF \
|
||||
-DINSTALL_DESKTOP:BOOL=OFF \
|
||||
-DENABLE_GTK:BOOL=OFF \
|
||||
-DBUNDLED_LIBS:BOOL=OFF \
|
||||
-DLIBNET_INCLUDE_DIR:PATH=$(STAGING_DIR)/usr/lib/libnet-1.1.x/include \
|
||||
-DLIBNET_LIBRARY:FILEPATH=$(STAGING_DIR)/usr/lib/libnet-1.1.x/lib/libnet.so \
|
||||
-DHAVE_ICONV:FILEPATH=$(STAGING_DIR)/usr/lib/libiconv-full/lib/libiconv.so \
|
||||
-DEXECUTABLE_OUTPUT_PATH=$(PKG_BUILD_DIR)/bin_out
|
||||
|
||||
define Package/ettercap/install
|
||||
$(INSTALL_DIR) $(1)/etc/ettercap
|
||||
$(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/ettercap/etter.* $(1)/etc/ettercap/
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/etter{cap,filter,log} $(1)/usr/bin/
|
||||
$(INSTALL_DIR) $(1)/usr/lib/ettercap
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ettercap/*.so $(1)/usr/lib/ettercap/
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/libettercap.so* $(1)/usr/lib/
|
||||
$(INSTALL_DIR) $(1)/usr/share/ettercap
|
||||
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/ettercap/* $(1)/usr/share/ettercap/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ettercap))
|
|
@ -0,0 +1,11 @@
|
|||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -6,8 +6,6 @@ set(VERSION "0.8.2")
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules")
|
||||
set(CMAKE_SCRIPT_PATH "${CMAKE_SOURCE_DIR}/cmake/Scripts")
|
||||
|
||||
-include(MacroEnsureOutOfSourceBuild)
|
||||
-macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source build. Please create a separate build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there.")
|
||||
|
||||
option(ENABLE_CURSES "Enable curses interface" ON)
|
||||
option(ENABLE_GTK "Enable GTK interface" ON)
|
|
@ -0,0 +1,22 @@
|
|||
--- a/cmake/Modules/EttercapLibCheck.cmake
|
||||
+++ b/cmake/Modules/EttercapLibCheck.cmake
|
||||
@@ -98,7 +98,7 @@ include(CheckLibraryExists)
|
||||
include(CheckIncludeFile)
|
||||
|
||||
# Iconv
|
||||
-FIND_LIBRARY(HAVE_ICONV iconv)
|
||||
+FIND_LIBRARY(HAVE_ICONV NAMES iconv libiconv-full PATHS ${STAGING_DIR}/usr/lib/libiconv-full)
|
||||
CHECK_FUNCTION_EXISTS(iconv HAVE_UTF8)
|
||||
if(HAVE_ICONV)
|
||||
# Seem that we have a dedicated iconv library not built in libc (e.g. FreeBSD)
|
||||
--- a/CMakeLists.txt
|
||||
++++ b/CMakeLists.txt
|
||||
@@ -126,6 +126,8 @@ endif(NOT DISABLE_RPATH)
|
||||
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb3 -DDEBUG -Wall -Wno-pointer-sign -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Wextra -Wredundant-decls" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELEASE "-O2 -w -D_FORTIFY_SOURCE=2" CACHE STRING "" FORCE)
|
||||
|
||||
+
|
||||
+
|
||||
if(OS_DARWIN)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-Wl" CACHE STRING "" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-Wl" CACHE STRING "" FORCE)
|
|
@ -0,0 +1,54 @@
|
|||
#
|
||||
# Copyright (C) 2012 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=reaver-wps-fork-t6x
|
||||
PKG_REV:=Big_endian
|
||||
PKG_VERSION:=$(PKG_REV)
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/t6x/reaver-wps-fork-t6x.git
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_VERSION:=$(PKG_REV)
|
||||
PKG_SOURCE_PROTO:=git
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/reaver
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=wireless
|
||||
TITLE:=Efficient online and offline brute force attack against Wifi Protected Setup
|
||||
URL:=https://github.com/t6x/reaver-wps-fork-t6x
|
||||
DEPENDS:=+libpcap +libsqlite3
|
||||
endef
|
||||
|
||||
define Package/reaver/description
|
||||
Reaver targets the external registrar functionality mandated by the WiFi
|
||||
Protected Setup specification.
|
||||
Access points will provide authenticated registrars with their current
|
||||
wireless configuration (including the WPA PSK), and also accept a new
|
||||
configuration from the registrar.
|
||||
New implementations consist of the PixieDust attack and many more.
|
||||
endef
|
||||
|
||||
CONFIGURE_PATH:=src
|
||||
|
||||
MAKE_PATH:=src
|
||||
|
||||
TARGET_CFLAGS+=$(TARGET_CPPFLAGS)
|
||||
|
||||
define Package/reaver/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/{reaver,wash} $(1)/usr/bin/
|
||||
$(INSTALL_DIR) $(1)/etc/reaver
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/reaver.db $(1)/etc/reaver/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,reaver))
|
|
@ -0,0 +1,56 @@
|
|||
#
|
||||
# Copyright (C) 2008-2014 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=at
|
||||
PKG_VERSION:=3.1.13
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
|
||||
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/a/at
|
||||
PKG_MD5SUM:=1da61af6c29e323abaaf13ee1a8dad79
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/at
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
DEPENDS:=+libelf1
|
||||
TITLE:=Delayed job execution and batch processing
|
||||
URL:=http://packages.debian.org/stable/at
|
||||
MAINTAINER:=Luka Perkov <openwrt@lukaperkov.net>
|
||||
endef
|
||||
|
||||
define Package/at/description
|
||||
At and batch read shell commands from standard input storing them as a job to
|
||||
be scheduled for execution in the future.
|
||||
endef
|
||||
|
||||
export SENDMAIL=/bin/true
|
||||
EXTRA_CFLAGS:=-DNEED_YYWRAP -I$(PKG_BUILD_DIR) \
|
||||
$(TARGET_LDFLAGS)
|
||||
|
||||
CONFIGURE_ARGS+=--prefix=/usr \
|
||||
--with-daemon_username=nobody \
|
||||
--with-daemon_groupname=nogroup \
|
||||
--with-jobdir=/var/spool/cron/atjobs \
|
||||
--with-atspool=/var/spool/cron/atspool
|
||||
|
||||
CONFIGURE_VARS += \
|
||||
ac_cv_header_security_pam_appl_h=no
|
||||
|
||||
define Package/at/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin $(1)/usr/sbin $(1)/etc/init.d/
|
||||
$(INSTALL_BIN) ./files/atd.init $(1)/etc/init.d/atd
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/at $(1)/usr/bin
|
||||
ln -sf at $(1)/usr/bin/atq
|
||||
ln -sf at $(1)/usr/bin/atrm
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/atd $(1)/usr/sbin
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,at))
|
|
@ -0,0 +1,23 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2011 OpenWrt.org
|
||||
|
||||
START=50
|
||||
|
||||
SERVICE_USE_PID=1
|
||||
|
||||
start() {
|
||||
[ -d /var/spool/cron/atjobs ] || {
|
||||
mkdir -m 0755 -p /var/spool/cron/atjobs
|
||||
touch /var/spool/cron/atjobs/.SEQ
|
||||
chown -R nobody:nogroup /var/spool/cron/atjobs
|
||||
}
|
||||
[ -d /var/spool/cron/atspool ] || {
|
||||
mkdir -m 0755 -p /var/spool/cron/atspool
|
||||
chown -R nobody:nogroup /var/spool/cron/atspool
|
||||
}
|
||||
service_start /usr/sbin/atd
|
||||
}
|
||||
|
||||
stop() {
|
||||
service_stop /usr/sbin/atd
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -3458,27 +3458,6 @@ $as_echo "yes" >&6; }
|
||||
$as_echo "no" >&6; }
|
||||
;;
|
||||
esac
|
||||
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Trying to compile a trivial ANSI C program" >&5
|
||||
-$as_echo_n "checking Trying to compile a trivial ANSI C program... " >&6; }
|
||||
-if test "$cross_compiling" = yes; then :
|
||||
- as_fn_error $? "Could not compile and run even a trivial ANSI C program - check CC." "$LINENO" 5
|
||||
-else
|
||||
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
-/* end confdefs.h. */
|
||||
- main(int ac, char **av) { return 0; }
|
||||
-_ACEOF
|
||||
-if ac_fn_c_try_run "$LINENO"; then :
|
||||
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
-$as_echo "yes" >&6; }
|
||||
-else
|
||||
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
-$as_echo "no" >&6; }
|
||||
- as_fn_error $? "Could not compile and run even a trivial ANSI C program - check CC." "$LINENO" 5
|
||||
-fi
|
||||
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
||||
- conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
-fi
|
||||
-
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking __attribute__((noreturn))" >&5
|
||||
$as_echo_n "checking __attribute__((noreturn))... " >&6; }
|
|
@ -0,0 +1,14 @@
|
|||
--- a/getloadavg.c
|
||||
+++ b/getloadavg.c
|
||||
@@ -69,8 +69,9 @@ Boston, MA 02110-1301 USA */
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
-#include "lisp.h"
|
||||
-#include "sysfile.h" /* for encapsulated open, close, read, write */
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <fcntl.h>
|
||||
|
||||
#ifndef HAVE_GETLOADAVG
|
||||
|
Loading…
Reference in New Issue