* Re: [PATCH] add new iptables ipt_connbytes match
From: Harald Welte @ 2005-08-13 15:46 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev, netfilter-devel, kaber, ak
In-Reply-To: <20050812.120904.88476024.davem@davemloft.net>
[-- Attachment #1.1: Type: text/plain, Size: 444 bytes --]
The reworked version (already uses aligned_u64). Pleas apply, thanks
--
- Harald Welte <laforge@netfilter.org> http://netfilter.org/
============================================================================
"Fragmentation is like classful addressing -- an interesting early
architectural error that shows how much experimentation was going
on while IP was being designed." -- Paul Vixie
[-- Attachment #1.2: 46-ipt_connbytes.patch --]
[-- Type: text/plain, Size: 8283 bytes --]
[NETFILTER] Add new iptables "connbytes" match
This patch ads a new "connbytes" match that utilizes the CONFIG_NF_CT_ACCT
per-connection byte and packet counters. Using it you can do things like
packet classification on average packet size within a connection.
Signed-off-by: Harald Welte <laforge@netfilter.org>
---
commit 98a0b5554e6e54a5a5a21b21b212186dc3c2118c
tree 43acbfa60366e1b111272851f1a1745a43a71d74
parent 5896088f554d8c2e7f3226973d1413df339e6b75
author Harald Welte <laforge@netfilter.org> Do, 11 Aug 2005 21:15:45 +0200
committer Harald Welte <laforge@netfilter.org> Do, 11 Aug 2005 21:15:45 +0200
include/linux/netfilter_ipv4/ipt_connbytes.h | 25 ++++
net/ipv4/netfilter/Kconfig | 11 ++
net/ipv4/netfilter/Makefile | 1
net/ipv4/netfilter/ipt_connbytes.c | 166 ++++++++++++++++++++++++++
4 files changed, 202 insertions(+), 1 deletions(-)
diff --git a/include/linux/netfilter_ipv4/ipt_connbytes.h b/include/linux/netfilter_ipv4/ipt_connbytes.h
new file mode 100644
--- /dev/null
+++ b/include/linux/netfilter_ipv4/ipt_connbytes.h
@@ -0,0 +1,25 @@
+#ifndef _IPT_CONNBYTES_H
+#define _IPT_CONNBYTES_H
+
+enum ipt_connbytes_what {
+ IPT_CONNBYTES_WHAT_PKTS,
+ IPT_CONNBYTES_WHAT_BYTES,
+ IPT_CONNBYTES_WHAT_AVGPKT,
+};
+
+enum ipt_connbytes_direction {
+ IPT_CONNBYTES_DIR_ORIGINAL,
+ IPT_CONNBYTES_DIR_REPLY,
+ IPT_CONNBYTES_DIR_BOTH,
+};
+
+struct ipt_connbytes_info
+{
+ struct {
+ aligned_u64 from; /* count to be matched */
+ aligned_u64 to; /* count to be matched */
+ } count;
+ u_int8_t what; /* ipt_connbytes_what */
+ u_int8_t direction; /* ipt_connbytes_direction */
+};
+#endif
diff --git a/net/ipv4/netfilter/Kconfig b/net/ipv4/netfilter/Kconfig
--- a/net/ipv4/netfilter/Kconfig
+++ b/net/ipv4/netfilter/Kconfig
@@ -386,6 +386,16 @@ config IP_NF_MATCH_CONNMARK
<file:Documentation/modules.txt>. The module will be called
ipt_connmark.o. If unsure, say `N'.
+config IP_NF_MATCH_CONNBYTES
+ tristate 'Connection byte/packet counter match support'
+ depends on IP_NF_CT_ACCT && IP_NF_IPTABLES
+ help
+ This option adds a `connbytes' match, which allows you to match the
+ number of bytes and/or packets for each direction within a connection.
+
+ If you want to compile it as a module, say M here and read
+ <file:Documentation/modules.txt>. If unsure, say `N'.
+
config IP_NF_MATCH_HASHLIMIT
tristate 'hashlimit match support'
depends on IP_NF_IPTABLES
@@ -723,6 +733,5 @@ config IP_NF_CONNTRACK_NETLINK
help
This option enables support for a netlink-based userspace interface
-
endmenu
diff --git a/net/ipv4/netfilter/Makefile b/net/ipv4/netfilter/Makefile
--- a/net/ipv4/netfilter/Makefile
+++ b/net/ipv4/netfilter/Makefile
@@ -59,6 +59,7 @@ obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl
obj-$(CONFIG_IP_NF_MATCH_STATE) += ipt_state.o
obj-$(CONFIG_IP_NF_MATCH_CONNMARK) += ipt_connmark.o
obj-$(CONFIG_IP_NF_MATCH_CONNTRACK) += ipt_conntrack.o
+obj-$(CONFIG_IP_NF_MATCH_CONNBYTES) += ipt_connbytes.o
obj-$(CONFIG_IP_NF_MATCH_TCPMSS) += ipt_tcpmss.o
obj-$(CONFIG_IP_NF_MATCH_REALM) += ipt_realm.o
obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ipt_addrtype.o
diff --git a/net/ipv4/netfilter/ipt_connbytes.c b/net/ipv4/netfilter/ipt_connbytes.c
new file mode 100644
--- /dev/null
+++ b/net/ipv4/netfilter/ipt_connbytes.c
@@ -0,0 +1,166 @@
+/* Kernel module to match connection tracking byte counter.
+ * GPL (C) 2002 Martin Devera (devik@cdi.cz).
+ *
+ * 2004-07-20 Harald Welte <laforge@netfilter.org>
+ * - reimplemented to use per-connection accounting counters
+ * - add functionality to match number of packets
+ * - add functionality to match average packet size
+ * - add support to match directions seperately
+ *
+ */
+#include <linux/module.h>
+#include <linux/skbuff.h>
+#include <linux/netfilter_ipv4/ip_conntrack.h>
+#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter_ipv4/ipt_connbytes.h>
+
+#include <asm/div64.h>
+#include <asm/bitops.h>
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
+MODULE_DESCRIPTION("iptables match for matching number of pkts/bytes per connection");
+
+/* 64bit divisor, dividend and result. dynamic precision */
+static u_int64_t div64_64(u_int64_t divisor, u_int64_t dividend)
+{
+ u_int64_t result = divisor;
+
+ if (dividend > 0xffffffff) {
+ int first_bit = find_first_bit((unsigned long *) ÷nd, sizeof(dividend));
+ /* calculate number of bits to shift. shift exactly enough
+ * bits to make dividend fit in 32bits. */
+ int num_shift = (64 - 32 - first_bit);
+ /* first bit has to be < 32, since dividend was > 0xffffffff */
+ result = result >> num_shift;
+ dividend = dividend >> num_shift;
+ }
+
+ do_div(divisor, dividend);
+
+ return divisor;
+}
+
+static int
+match(const struct sk_buff *skb,
+ const struct net_device *in,
+ const struct net_device *out,
+ const void *matchinfo,
+ int offset,
+ int *hotdrop)
+{
+ const struct ipt_connbytes_info *sinfo = matchinfo;
+ enum ip_conntrack_info ctinfo;
+ struct ip_conntrack *ct;
+ u_int64_t what = 0; /* initialize to make gcc happy */
+
+ if (!(ct = ip_conntrack_get((struct sk_buff *)skb, &ctinfo)))
+ return 0; /* no match */
+
+ switch (sinfo->what) {
+ case IPT_CONNBYTES_WHAT_PKTS:
+ switch (sinfo->direction) {
+ case IPT_CONNBYTES_DIR_ORIGINAL:
+ what = ct->counters[IP_CT_DIR_ORIGINAL].packets;
+ break;
+ case IPT_CONNBYTES_DIR_REPLY:
+ what = ct->counters[IP_CT_DIR_REPLY].packets;
+ break;
+ case IPT_CONNBYTES_DIR_BOTH:
+ what = ct->counters[IP_CT_DIR_ORIGINAL].packets;
+ what += ct->counters[IP_CT_DIR_REPLY].packets;
+ break;
+ }
+ break;
+ case IPT_CONNBYTES_WHAT_BYTES:
+ switch (sinfo->direction) {
+ case IPT_CONNBYTES_DIR_ORIGINAL:
+ what = ct->counters[IP_CT_DIR_ORIGINAL].bytes;
+ break;
+ case IPT_CONNBYTES_DIR_REPLY:
+ what = ct->counters[IP_CT_DIR_REPLY].bytes;
+ break;
+ case IPT_CONNBYTES_DIR_BOTH:
+ what = ct->counters[IP_CT_DIR_ORIGINAL].bytes;
+ what += ct->counters[IP_CT_DIR_REPLY].bytes;
+ break;
+ }
+ break;
+ case IPT_CONNBYTES_WHAT_AVGPKT:
+ switch (sinfo->direction) {
+ case IPT_CONNBYTES_DIR_ORIGINAL:
+ what = div64_64(ct->counters[IP_CT_DIR_ORIGINAL].bytes,
+ ct->counters[IP_CT_DIR_ORIGINAL].packets);
+ break;
+ case IPT_CONNBYTES_DIR_REPLY:
+ what = div64_64(ct->counters[IP_CT_DIR_REPLY].bytes,
+ ct->counters[IP_CT_DIR_REPLY].packets);
+ break;
+ case IPT_CONNBYTES_DIR_BOTH:
+ {
+ u_int64_t bytes;
+ u_int64_t pkts;
+ bytes = ct->counters[IP_CT_DIR_ORIGINAL].bytes +
+ ct->counters[IP_CT_DIR_REPLY].bytes;
+ pkts = ct->counters[IP_CT_DIR_ORIGINAL].packets+
+ ct->counters[IP_CT_DIR_REPLY].packets;
+
+ /* FIXME_THEORETICAL: what to do if sum
+ * overflows ? */
+
+ what = div64_64(bytes, pkts);
+ }
+ break;
+ }
+ break;
+ }
+
+ if (sinfo->count.to)
+ return (what <= sinfo->count.to && what >= sinfo->count.from);
+ else
+ return (what >= sinfo->count.from);
+}
+
+static int check(const char *tablename,
+ const struct ipt_ip *ip,
+ void *matchinfo,
+ unsigned int matchsize,
+ unsigned int hook_mask)
+{
+ const struct ipt_connbytes_info *sinfo = matchinfo;
+
+ if (matchsize != IPT_ALIGN(sizeof(struct ipt_connbytes_info)))
+ return 0;
+
+ if (sinfo->what != IPT_CONNBYTES_WHAT_PKTS &&
+ sinfo->what != IPT_CONNBYTES_WHAT_BYTES &&
+ sinfo->what != IPT_CONNBYTES_WHAT_AVGPKT)
+ return 0;
+
+ if (sinfo->direction != IPT_CONNBYTES_DIR_ORIGINAL &&
+ sinfo->direction != IPT_CONNBYTES_DIR_REPLY &&
+ sinfo->direction != IPT_CONNBYTES_DIR_BOTH)
+ return 0;
+
+ return 1;
+}
+
+static struct ipt_match state_match = {
+ .name = "connbytes",
+ .match = &match,
+ .checkentry = &check,
+ .me = THIS_MODULE
+};
+
+static int __init init(void)
+{
+ return ipt_register_match(&state_match);
+}
+
+static void __exit fini(void)
+{
+ ipt_unregister_match(&state_match);
+}
+
+module_init(init);
+module_exit(fini);
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* [PATCH] introduce and use aligned_u64 in nfnetlink
From: Harald Welte @ 2005-08-13 15:45 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev, netfilter-devel, kaber, ak
In-Reply-To: <20050812.120904.88476024.davem@davemloft.net>
[-- Attachment #1.1: Type: text/plain, Size: 416 bytes --]
This time without the ipt_connbytes hunk:
--
- Harald Welte <laforge@netfilter.org> http://netfilter.org/
============================================================================
"Fragmentation is like classful addressing -- an interesting early
architectural error that shows how much experimentation was going
on while IP was being designed." -- Paul Vixie
[-- Attachment #1.2: 48-aligned_u64.patch --]
[-- Type: text/plain, Size: 2669 bytes --]
[NETFILTER] introduce and use aligned_u64 data type
As proposed by Andi Kleen, this is required esp. for x86_64 architecture,
where 64bit code needs 8byte aligned 64bit data types, but 32bit userspace
apps will only align to 4bytes.
Signed-off-by: Harald Welte <laforge@netfilter.org>
---
commit 30da9a3da187af74b2e2d00becf2d9cab3624ddd
tree 7666f6ce67e96beedc8884f1aba18ea80a20e2b1
parent 7c249f391a3b9bc86ec07d734959c532a3c7a3f6
author Harald Welte <laforge@netfilter.org> Fr, 12 Aug 2005 21:00:28 +0200
committer Harald Welte <laforge@netfilter.org> Fr, 12 Aug 2005 21:00:28 +0200
include/linux/netfilter/nfnetlink_log.h | 5 +++--
include/linux/netfilter/nfnetlink_queue.h | 5 +++--
include/linux/types.h | 3 +++
4 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/include/linux/netfilter/nfnetlink_log.h b/include/linux/netfilter/nfnetlink_log.h
--- a/include/linux/netfilter/nfnetlink_log.h
+++ b/include/linux/netfilter/nfnetlink_log.h
@@ -5,6 +5,7 @@
* and not any kind of function definitions. It is shared between kernel and
* userspace. Don't put kernel specific stuff in here */
+#include <linux/types.h>
#include <linux/netfilter/nfnetlink.h>
enum nfulnl_msg_types {
@@ -27,8 +28,8 @@ struct nfulnl_msg_packet_hw {
} __attribute__ ((packed));
struct nfulnl_msg_packet_timestamp {
- u_int64_t sec;
- u_int64_t usec;
+ aligned_u64 sec;
+ aligned_u64 usec;
} __attribute__ ((packed));
#define NFULNL_PREFIXLEN 30 /* just like old log target */
diff --git a/include/linux/netfilter/nfnetlink_queue.h b/include/linux/netfilter/nfnetlink_queue.h
--- a/include/linux/netfilter/nfnetlink_queue.h
+++ b/include/linux/netfilter/nfnetlink_queue.h
@@ -1,6 +1,7 @@
#ifndef _NFNETLINK_QUEUE_H
#define _NFNETLINK_QUEUE_H
+#include <linux/types.h>
#include <linux/netfilter/nfnetlink.h>
enum nfqnl_msg_types {
@@ -24,8 +25,8 @@ struct nfqnl_msg_packet_hw {
} __attribute__ ((packed));
struct nfqnl_msg_packet_timestamp {
- u_int64_t sec;
- u_int64_t usec;
+ aligned_u64 sec;
+ aligned_u64 usec;
} __attribute__ ((packed));
enum nfqnl_attr_type {
diff --git a/include/linux/types.h b/include/linux/types.h
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -123,6 +123,9 @@ typedef __u64 u_int64_t;
typedef __s64 int64_t;
#endif
+/* this is a special 64bit data type that is 8-byte aligned */
+#define aligned_u64 unsigned long long __attribute__((aligned(8)))
+
/*
* The type used for indexing onto a disc or disc partition.
* If required, asm/types.h can override it and define
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* 80 % Discount on All Systemworks Titles
From: Martha Block @ 2005-08-13 15:41 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 18408 bytes --]
^ permalink raw reply
* °¡°ÝÆ÷±â~´«¹°ÀÇóºÐ~
From: Ora Goddard @ 2005-08-13 15:27 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 444 bytes --]
^ permalink raw reply
* ÆÐ¼Ç°ú °Ç°À»Çϳª·Î/ºÎµµÃ³ºÐ
From: Ilene Lang @ 2005-08-13 15:14 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 391 bytes --]
^ permalink raw reply
* Á¤Ç°¹ö¹ö¸® ¼ÅÃ÷¸¦È¹±âÀûÀÎ °¡°Ý¿¡..
From: ±è»ï¼ø @ 2005-08-13 15:06 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 2519 bytes --]
^ permalink raw reply
* À£ºùÆÈÂ¾Æ½Ã³ª¿ä?-´«¹°ÀǺεµÃ³ºÐ
From: Tyson Sheets @ 2005-08-13 14:53 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 391 bytes --]
^ permalink raw reply
* Re: [PATCH] add new iptables ipt_connbytes match
From: Harald Welte @ 2005-08-13 14:51 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Linux Netdev List, Netfilter Development Mailinglist
In-Reply-To: <42FD4AC6.2020506@trash.net>
[-- Attachment #1: Type: text/plain, Size: 820 bytes --]
On Sat, Aug 13, 2005 at 03:20:06AM +0200, Patrick McHardy wrote:
> Harald Welte wrote:
> >Just send two incremental patches to Dave.
>
> Here they are. The first patch fixes the div64_64 function, the second
> one renames some constants.
Ok, just in case Dave was waiting for my comments (which are usually
not required since Patricks patches tend to have a higher quality than
mine):
ACK-ed-by: Harald Welte <laforge@netfilter.org>
--
- Harald Welte <laforge@netfilter.org> http://netfilter.org/
============================================================================
"Fragmentation is like classful addressing -- an interesting early
architectural error that shows how much experimentation was going
on while IP was being designed." -- Paul Vixie
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* Re: [PATCH] add new iptables ipt_connbytes match
From: Harald Welte @ 2005-08-13 14:50 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev, netfilter-devel, kaber, ak
In-Reply-To: <20050812.120904.88476024.davem@davemloft.net>
[-- Attachment #1: Type: text/plain, Size: 2023 bytes --]
On Fri, Aug 12, 2005 at 12:09:04PM -0700, David S. Miller wrote:
> From: Harald Welte <laforge@netfilter.org>
> Date: Fri, 12 Aug 2005 21:03:43 +0200
>
> > Ok, I hope everyone is fine with this patch:
>
> It is, but I did not add the connbytes patch into my tree so I can't
> use this patch as-is. That's why I replied "this is broken, fix u64
> alignment" to the connbytes patch instead of "applied, thanks" :-)
>
> Please untangle this stuff. This is how we end up with a big mess of
> noise changesets in the tree, due to how we have been putting
> half-working changes in first then a bunch of "fixup" patches. I'd
> like to avoid that, because I then spend a lot of time redoing things
> when I rebase the tree later.
Fine, I can understand that in the case of the connbytes/unaligned case.
Speaking more generally:
I know I've been the exact opposite with all the nfnetlink_* stuff.
But the problem is to a certain degree that bugs aren't discovered until
it's in some tree that a lot of people use...
I think our whole usual strategy 'put it in patch-o-matic and wait until
bugs have been shaken out' doesn't really work because there's too
little people actually using the code from there.
So for new development, I'm now more inclined to push things sooner to
you - even more for code that only adds new featurss. If you generally
dislike that, please let me know.
> So in this case, send me the aligned_u64 patch seperately which
> doesn't assume connbytes is in the tree. Then another patch which
> adds connbytes with the proper usage of aligned_u64.
sure. no problem. Will be sent soon.
--
- Harald Welte <laforge@netfilter.org> http://netfilter.org/
============================================================================
"Fragmentation is like classful addressing -- an interesting early
architectural error that shows how much experimentation was going
on while IP was being designed." -- Paul Vixie
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* CLAIM YOUR WINNING!!!
From: lucky day @ 2005-08-13 14:43 UTC (permalink / raw)
To: lottery
AWARD/FINAL NOTIFICATION
LUCKYDAY INTERNATIONAL LOTTERY, NEDERLAND.
Laan van Hoornwijck 55
2289 DG Rijswijk
Postadres
Postbus 3059
2280 GB Rijswijk
Website:www.luckyday.nl
LUCKYDAY INTERNATIONAL LOTTERY, announces today the winners of its internet lottery program for this quarter.
The lottery program is conducted every quarter with email addresses of internet users. The draws are usually from about 26,000 email addresses from all over the world,
which are selected from the internet randomly.
The draws are made in four categories using a special computer balloting system.
Your receipt of this mail means that your email address has won in category ?D? of the draws. Your email address drew the winning numbers:32:01:00:67:4 serial number 3232134,batch number ssL/45829/NL/05,lottery ref
number SL8455110 and security credited file numbers 01-37-44-85-486 and subsequently won the sum
of 800,000,00 EURO (EIGHT HUNDERED THOUSAND EURO).
You are at this point advised to contact our NL agent below to begin your claim:
PAYMENT AGENT MR MARK SMITH.
Email: marksmi_th@zwallet.com
You will be given a form to complete and return same to any one of our appointed financial trustees.
Their Winning/processing department will validate your winning and provide information on the collection of your prize.
All winning must be claimed not later than 25th of
August, 2005.After this date all unclaimed funds will be included in the next stake.
You are advised to initiate contact with our agent within one weeks of the receipt of this mail.
Any prize whose collection is not initiated within the stipulated time will be deemed unclaimed.
We do urge you to fully cooperate with us so that you could collect your winning.
In course of any change of address do inform our agent as soon as possible.
Sincerely yours,
Mr. Richard K. Lloyd
Lottery Coordinator.
___________________________________________________
Check-out GO.com
GO get your free GO E-Mail account with expanded storage of 6 MB!
http://mail.go.com
^ permalink raw reply
* ½Å±Ô ¹«·á¿ÀÇÂÇà»çÁøÇàÁß Âü¿©¸¸Çϼŵµ...ellipse qclixktglalnbszip
From: Tammie Grimes @ 2005-08-13 14:34 UTC (permalink / raw)
To: linux-xfs
[-- Attachment #1: Type: text/html, Size: 886 bytes --]
^ permalink raw reply
* ¸·¹ÙÁö ºÎµµÁ¤¸®´«¹°ÀǼ¼ÀÏ~
From: Max Gustafson @ 2005-08-13 14:32 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 391 bytes --]
^ permalink raw reply
* Hmm... how soon you forget about me!
From: Salvatore Bennett @ 2005-08-13 14:17 UTC (permalink / raw)
To: netdev-bounce
[-- Attachment #1: Type: text/html, Size: 5424 bytes --]
^ permalink raw reply
* 10ºÐ¾¿¸¸ ÅõÀÚÇÏ¿©¹«·á·Î ¿µ¾îȸÈüÇèÇØº¸¼¼¿ä~~**
From: ¾ÈÇöÁ¤ @ 2005-08-13 14:13 UTC (permalink / raw)
To: cvs
[-- Attachment #1: Type: text/html, Size: 2635 bytes --]
^ permalink raw reply
* ¸®¹ÙÀ̽ºÁ¤Ç° û¹ÙÁöÃÊÆ¯°¡¼¼ÀÏ!
From: ±è¼±¾Æ @ 2005-08-13 14:10 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 2709 bytes --]
^ permalink raw reply
* Approved low mortage rate
From: Ann Berry @ 2005-08-13 13:55 UTC (permalink / raw)
To: nce
Cc: ner-devfs, ner-linux-xfs, ner-netdev, ner-ogl-sample-cvs, netdev,
netdev-bounce, netdev-outgoing, newman, nfo-inventor-dev, nguyen,
ntor-dev, numa, nux, nux-mips, nux-xfs, o-inventor
Hello,
We tried contacting you awhile ago about your low interest morta(ge rate.
You have been selected for our lowest rate in years...
You could get over $420,000 for as little as $400 a month!
Ba(d credit, Bank*ruptcy? Doesn't matter, low rates are fixed no matter what!
To get a free, no obli,gation consultation click below:
http://www.nxshrg.com/i/LzMvaW5kZXgvYXJuLzdhOWoyaTQ0ZGFn
Best Regards,
Angie Holt
to be remov(ed: http://www.nxshrg.com
this process takes one week, so please be patient. we do our
best to take your email/s off but you have to fill out a rem/ove
or else you will continue to recieve email/s.
^ permalink raw reply
* cheaper price
From: Discounted Rx Meds @ 2005-08-13 13:50 UTC (permalink / raw)
To: Meds List; +Cc: postwait, schmidt, netdev, ogl-sample
[-- Attachment #1.1: Type: text/plain, Size: 92 bytes --]
Sat, 13 Aug 2005 05:50:53 -0800
80% OFF on all Meds
khgxud ufbrfxsqjiyk, cjiohu.
[-- Attachment #1.2: Type: text/html, Size: 851 bytes --]
[-- Attachment #2: Y666kN7F.gif --]
[-- Type: image/gif, Size: 15701 bytes --]
^ permalink raw reply
* ±ä±ÞÀÚ±Ý Ä«µå°áÁ¦½ÑÀÌÀڷκô·Áµå¸³´Ï´Ù
From: ±è¼±¾Æ @ 2005-08-13 13:43 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 2268 bytes --]
^ permalink raw reply
* ¢º¢¹¿µ¾î°¡µÉ¶§±îÁö [¹«Á¦Çѹ«·áüÇè] !!!!! hdwdkcbrazwcvjjw h
From: Wendi Boyle @ 2005-08-13 13:31 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 1790 bytes --]
^ permalink raw reply
* Á¤Ç°¹ö¹ö¸® ¼ÅÃ÷¸¦È¹±âÀûÀÎ °¡°Ý¿¡~~~
From: ±è»ï½Ä @ 2005-08-13 13:22 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 2519 bytes --]
^ permalink raw reply
* ¡Ù²Þ¡ÙÀºÀÌ·ç¾îÁø´Ù~ ½Å±âÇѸ¶¼úµµ±¸ ÃÊÆ¯°¡ÇÒÀÎÆÇ¸Å! x
From: Hallie @ 2005-08-13 13:21 UTC (permalink / raw)
To: netdev
[-- Attachment #1: Type: text/html, Size: 2530 bytes --]
^ permalink raw reply
* CONGRATULATIONS!!!
From: WORLDWINNINGS PROMOTIONS @ 2005-08-13 13:15 UTC (permalink / raw)
[-- Attachment #1: Type: text/html, Size: 8995 bytes --]
^ permalink raw reply
* 還花錢上瑜珈課嗎?本光碟讓你輕鬆進入瑜珈的領域喔
From: 瑜珈教學大碟~ @ 2005-08-13 13:10 UTC (permalink / raw)
[-- Attachment #1: Type: text/html, Size: 743 bytes --]
^ permalink raw reply
* 365種性愛姿勢大全,本光碟由真人演出的唷!
From: 性愛教學大碟~ @ 2005-08-13 13:03 UTC (permalink / raw)
[-- Attachment #1: Type: text/html, Size: 784 bytes --]
^ permalink raw reply
* 倡導夫妻之間激情的性生活!本光碟由真人演出喔!
From: 性愛教學大碟~ @ 2005-08-13 12:57 UTC (permalink / raw)
[-- Attachment #1: Type: text/html, Size: 784 bytes --]
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox