16th Mar, 2008

Pastebin post filtering

As there’s been some cases of cracked email address lists being posted on pastebin recently, this week I tweaked the spam filtering to block such posts. A few legitimate posts got caught in the crossfire, causing a few more tweaks to the rules.

If you’re having trouble posting something because pastebin says it looks like spam, post a sample in a comment below and I’ll see what I can do to improve it!

Responses

The following code gets caught “$loserrand=mt_rand(1,4);
$loserarray=(”http://happybunny.orbitearthstores.com/images/loserLarge.jpg”,
“http://www.babble.com/CS/blogs/strollerderby/2007/10/23-End%20of%20Month/loser.gif”,
“http://img357.imageshack.us/img357/2787/fail2it9.jpg”,
“http://www.wegotcards.com/cards/fun/sports/losing.GIF”);
$loseimg=$loserarray[$loserrand];”

Even Akismet thought that might be spam! Not sure there’s a lot I could do, it’s nearly all URLs.

Still, your code problem isn’t about the urls, its your off-by-one error. So, you could boil it down as follows:

$loserarray=(”url1″, “url2″, “url3″);
$loserrand=mt_rand(0,count($loserarray)-1);
$loseimg=$loserarray[$loserrand];

Again, the Akismet spam blocker on this blog thought your post was spam too.

There’s very little I could do differentiate between lists of spam urls and legimate ones, but I’m open to suggestions.

Probably the only thing would be some kind of fiendish CAPTCHA if the spam check fails your post maybe..

I don’t know how well this would work for pastebin but you should check out some rhsbl lists. http://wiki.openrbl.org/wiki/Category:RHSBL

The following got blocked as spam. One url did it. When I changed the http, it became acceptable (see http://cornell.pastebin.com/md34ee0d):

[Process]
Type=Edit text
Engine=MediaWiki
Script=http://wiki.myCompany.com/wiki/index.php
Server=http://wiki.myCompany.com
Path=/wiki
Special namespace=Special

[File]
Extension=wiki
URL=http://wiki.myCompany.com/wiki/index.php?title=myProject&action=edit&internaledit=true

certain conditions. Type ‘core show license’ for details.
=========================================================================
Connected to Asterisk 1.4.18.1-2 RPM by vc-rpms@voipconsulting.nl currently running on voip (pid = 2648)
Verbosity is at least 3
voip*CLI> set verbose 9
Verbosity was 3 and is now 9
The ’set verbose’ command is deprecated and will be removed in a future release. Please use ‘core set verbose’ instead.
== Parsing ‘/etc/asterisk/manager.conf’: Found
== Parsing ‘/etc/asterisk/manager_additional.conf’: Found
== Parsing ‘/etc/asterisk/manager_custom.conf’: Found
== Connect attempt from ‘127.0.0.1′ unable to authenticate
== Parsing ‘/etc/asterisk/manager.conf’: Found
== Parsing ‘/etc/asterisk/manager_additional.conf’: Found
== Parsing ‘/etc/asterisk/manager_custom.conf’: Found
== Connect attempt from ‘127.0.0.1′ unable to authenticate
— Executing [4556221@from-internal:1] Macro(”SIP/1051-097890e0″, “user-callerid|SKIPTTL|”) in new stack
— Executing [s@macro-user-callerid:1] NoOp(”SIP/1051-097890e0″, “user-callerid: device 1051″) in new stack
— Executing [s@macro-user-callerid:2] Set(”SIP/1051-097890e0″, “AMPUSER=1051″) in new stack
— Executing [s@macro-user-callerid:3] GotoIf(”SIP/1051-097890e0″, “0?report”) in new stack
— Executing [s@macro-user-callerid:4] ExecIf(”SIP/1051-097890e0″, “1|Set|REALCALLERIDNUM=1051″) in new stack
— Executing [s@macro-user-callerid:5] NoOp(”SIP/1051-097890e0″, “REALCALLERIDNUM is 1051″) in new stack
— Executing [s@macro-user-callerid:6] Set(”SIP/1051-097890e0″, “AMPUSER=1051″) in new stack
— Executing [s@macro-user-callerid:7] Set(”SIP/1051-097890e0″, “AMPUSERCIDNAME=Eric Bechtel”) in new stack
— Executing [s@macro-user-callerid:8] GotoIf(”SIP/1051-097890e0″, “0?report”) in new stack
— Executing [s@macro-user-callerid:9] Set(”SIP/1051-097890e0″, “AMPUSERCID=1051″) in new stack

(comment truncated for brevity!)

The spam filter is too aggressive! Some innocent output of apt-get update is considered spam…
It put the text up at
http://web.davidfaure.fr/tmp/output

I’m thinking I might have to find a new pastebin. I can’t even post error output from the terminal in Ubuntu.

“Sorry, your post tripped our spam filter - let us know if you think this could be improved”

This is rediculous. I don’t know how we are supposed to post things we need!

== HTTP Manager ‘admin’ logged on from 63.147.46.186
— Executing [1@topstatsanswer:1] Answer(”Local/1@topstatsanswer-2ad1,2″, “”) in new stack
— Executing [1@topstatsanswer:2] Wait(”Local/1@topstatsanswer-2ad1,2″, “30″) in new stack
> Channel Local/1@topstatsanswer-2ad1,1 was answered.
— Executing [1@topstats:1] Answer(”Local/1@topstatsanswer-2ad1,1″, “”) in new stack
— Executing [1@topstats:2] System(”Local/1@topstatsanswer-2ad1,1″, “/usr/bin/top -n 2 | /bin/grep load | /bin/grep average | /usr/bin/cut -d’,’ -f5 | /usr/bin/cut -d’ ‘ -f 2 | /usr/bin/tail -n 1 > /tmp/load”) in new stack
— Executing [1@topstats:3] System(”Local/1@topstatsanswer-2ad1,1″, “/bin/echo “Test” > /tmp/test”) in new stack
— Executing [1@topstats:4] Hangup(”Local/1@topstatsanswer-2ad1,1″, “”) in new stack
== Spawn extension (topstats, 1, 4) exited non-zero on ‘Local/1@topstatsanswer-2ad1,1′
== Spawn extension (topstatsanswer, 1, 2) exited non-zero on ‘Local/1@topstatsanswer-2ad1,2′

@kykebaker: I can’t do anything without a sample
@ajohnson: many thanks, filter has been improved to let that through

How about you giving the user a chance to ‘prove’ it’s not a spam. E.g. showing some skewed image containing a short string, and if the user can type that, he or she can post the message anyway.
This won’t protect against manually entered spam-posts though.

The following code gets filtered.

import copy
class Node:
def __init__(self, parent, number):
self.children = set()
self.parent = parent
self.number = number
if self.parent is not None: parent.children.add(self)
def viewtree(self,top=True):
print self.number, ‘(’,
for child in self.children: child.viewtree(top=False)
print ‘)’,
if top: print
def findtop(self):
if self.parent is None: return self
else: return findtop(self.parent)
def breakboss(self):
if self.parent is not None:
self.parent.children.remove(self)
yield self.parent.findtop()

def findsmallest(node, smallestsub=None):
if smallestsub is None: smallestsub = node
for child in node.children:
r = findsmallest(child)
if r.number < smallestsub.number: smallestsub = r
if node.number < smallestsub: return node
else: return smallestsub

def invertcontrol(node):
if node.parent is not None:
node.children.add(node.parent)
node.parent.children.remove(node)
invertcontrol(node.parent)
node.parent = None

for child in self.children:
child.parent = None
newcontrol = findsmallest(child)
invertcontrol(newcontrol)
yield newcontrol
self.children.clear()
self.parent = None

#class Node does everything we need. now we just load some bosses and
#destroy segments.

def makelimb(number, children, parent=None):
n = Node(parent, number)
for number2, children2 in children:
makelimb(number2, children2, n)
return n

bossdata1 = (1,
(
(3,
(
(3,
(
(3,
(
(3,
(
(2,
(
(3,
(
),),),),),),),),),),),),),)

bossdata2 = (1, (
(3, (
(3, (
(2, (
(3, ()),
(3, ()),
(3, ()),
)
),
)
),
)
),
(3, (
(2, (
(3, ()),
)
),
)
),
(3, (
(2, (
(3, ()),
(3, ()),
(3, ()),
)
),
)
)
)
)

# break your second example at the control segment and view the results

boss = makelimb(*bossdata1)
for bosslet in boss.breakboss():
bosslet.viewtree()

print “—”

# break your first example at the control segment and view the results

boss2 = makelimb(*bossdata2)
for bosslet in boss2.breakboss():
bosslet.viewtree()

print “—”

# children are currently unordered. i don’t have a good way of keeping
# references to individual segments because it totally depends on
# how you intend to target them.
# so it the below test i pick a random child of the controller node of your
# first example and destroy it and show the results.
# if you change the children from sets to lists, you will be able to
# access segments like this:
# thepink3 = boss3.children[0]
# theright2 = boss3.children[1].children[0]
# or you could implement __getitem__
# def __getitem__(self, path):
# def getsub(node, path):
# if path: return getsub(node.children[path[0]], path[1:])
# else: return node
#
# theright3=boss2[1,0,0]
#or
# path = (1,0,0)
# theright3=boss2[path]
#or
# theright2=boss2[1,0]
# theright3=theright2[0]
#
# the bosses currently have no notion of locations of segments.
# i have ideas for how to do that, but it depends on how your game logic works
# and i guess you can figure that out anyway. this still shows the basic
# problem of breaking up bosses. the core of the solution is in the
# findsmallest() and invertcontrol() functions.
#
# note that there is no overall ‘boss’ class. the closest thing to a boss
# object is the node with no parent, which can be returned from any node with
# node.findtop().

boss3 = makelimb(*bossdata2)
randomchild = list(boss3.children)[0]
print “removing”,
randomchild.viewtree()
for bosslet in randomchild.breakboss():
bosslet.viewtree()

# note that if you keep a reference to your destroyed segment it will have
# changed itself to a disembodied segment, i.e. its own boss. the original
# boss is dissolved.
# breakboss() returns an iterator, so if you need a list,
# list(node.breakboss())

The spam filter also seems to be blocking something in a typical bash ’ssh -vvv’ (verbose output) session; I tried uploading such a session as ‘Bash’ and got the message that my post had been blocked by spam filtering.

sample session:

ssh -vvv localhost
OpenSSH_5.0p1, OpenSSL 0.9.7l 28 Sep 2006
debug1: Reading configuration data /Users/jd/.ssh/config
debug1: Applying options for *
debug1: Reading configuration data /usr/etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 22.
debug1: Connection established.
debug3: Not a RSA1 key file /Users/jd/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type ‘—–BEGIN’
debug3: key_read: missing keytype
debug2: key_type_from_name: unknown key type ‘Proc-Type:’
debug3: key_read: missing keytype
debug2: key_type_from_name: unknown key type ‘DEK-Info:’
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug2: key_type_from_name: unknown key type ‘—–END’
debug3: key_read: missing keytype
debug1: identity file /Users/jd/.ssh/id_rsa type 1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.0
debug1: match: OpenSSH_5.0 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.0
debug2: fd 3 setting O_NONBLOCK
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-cbc hmac-md5 none
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 131/256
debug2: bits set: 526/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug3: check_host_in_hostfile: filename /Users/jd/.ssh/known_hosts
debug3: check_host_in_hostfile: match line 25
debug1: Host ‘localhost’ is known and matches the RSA host key.
debug1: Found key in /Users/jd/.ssh/known_hosts:25
debug2: bits set: 532/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received

Just a tip, why not you have a CAPTCHA pre-set for anyone tripping the filter? Or, even better than poor CAPTCHA, a randomized set of images (that are generated via PHP so that image names cannot be used to bypass this method), and an array of questions such as: “Which one of these pictures is a cat?” or “Which one of these pictures has a burger in it?”; it is physically impossible to bypass this if done properly. The only possible method would be guessing pictures repeatedly, and if you get 3 wrong, you could automatically prevent the user from posting for a period of 3 hours or similar.

OpenSSH_4.7p1 Debian-12, OpenSSL 0.9.8g 19 Oct 2007
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to 192.168.1.5 [192.168.1.5] port 22.
debug1: Connection established.
debug1: identity file /home/tom/.ssh/identity type -1
debug1: identity file /home/tom/.ssh/id_rsa type -1
debug3: Not a RSA1 key file /home/tom/.ssh/id_dsa.
debug2: key_type_from_name: unknown key type ‘—–BEGIN’
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug2: key_type_from_name: unknown key type ‘—–END’
debug3: key_read: missing keytype
debug1: identity file /home/tom/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-12
debug1: match: OpenSSH_4.7p1 Debian-12 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-12
debug2: fd 3 setting O_NONBLOCK
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-cbc hmac-md5 none
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 133/256
debug2: bits set: 514/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug3: check_host_in_hostfile: filename /home/tom/.ssh/known_hosts
debug3: check_host_in_hostfile: match line 1
debug1: Host ‘192.168.1.5′ is known and matches the RSA host key.
debug1: Found key in /home/tom/.ssh/known_hosts:1
debug2: bits set: 512/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/tom/.ssh/identity ((nil))
debug2: key: /home/tom/.ssh/id_rsa ((nil))
debug2: key: /home/tom/.ssh/id_dsa ((nil))
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,gssapi,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/tom/.ssh/identity
debug3: no such identity: /home/tom/.ssh/identity
debug1: Trying private key: /home/tom/.ssh/id_rsa
debug3: no such identity: /home/tom/.ssh/id_rsa
debug1: Trying private key: /home/tom/.ssh/id_dsa
debug1: read PEM private key done: type DSA
debug3: sign_and_send_pubkey
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
tom@192.168.1.5’s password:

pretty much makes pastebin useless for real task. Thanks.

@anon, I was able to post that ssh debug fragment OK

How about image maps which have a code? Before posting, this code should be inserted in the text form. There are plenty of working examples around.

simple log output from IRC, thanks a million

[19:56:29] test Failed
[19:56:29] test
[19:56:29] SnapCrackleMobile [pocketirc@forexchat-DF320650.hsd1.ga.comcast.net] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] torqueconverter [email@A7942B12.5B235C4C.8552E0C6.IP] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] nizzo [3ed1bec2@forexchat-44A36A29.mibbit.com] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] damari [damari@forexchat-35218400.mdp.mlm.bostream.se] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] mib_ap168v [4ca913c5@forexchat-44A36A29.mibbit.com] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] phy [phy@forexchat-D611CAA8.tampabay.res.rr.com] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] hastake [ake@forexchat-3B035980.adsl-dyn.isp.belgacom.be] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] humor3 [300@forexchat-5C3A4B42.catv.broadband.hu] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] peer [cleo@forexchat-540F04A9.in] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] Gr3G0 [txdkib@forexchat-797ED6F.dsl.telesp.net.br] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] RedRobin [redrobins@forexchat-F8232DFE.dsl.pltn13.pacbell.net] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] javax [javax@AD3B6891.74B955CD.640D5C50.IP] has quit IRC: NETSPLIT west.us.ircforex.com europa.ircforex.com
[19:56:29] mjoll-work [mjollnir@forexchat-C06D98C.toutatis.be] has quit IRC: NETSPLIT west.us.europa.ircforex.com

I am relatively new to pastbin, but think the hard work you are putting in to have a useful product is outstanding. Many do find it easy to critisize, roll with the punches and continue to polish your excellent website.

KUDO’s!!!

Why do all pastes return 404 Not Found (along with the normal and complete HTML page)?

HI!
Would be nice if I can post the posters name and format from the URL like this:
http://www.pastbin.com/?format=php&poster=myname

Then I would use it from IRC to get the nick and post the nice url to them.

Is this possible?

Leave a response

Your response:

Categories