2006年06月21日 星期三 17:30
新建网页 1
Personal Amateur Radiostations of P.R.China
ZONE CQ24 ITU44 ShenZhen, China
Hi All
遇到一些问题,现在头大,找不出问题所在.
我用telnet 127.0.0.1 119 测试LIST命令成功.但用outlook死活出不来列表.但有一次也不知为什么就成功了.现在又有问题了.
程序如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Network News Transport Protocol Server Program
import sys
import socket
import threading
import time
import asyncore, asynchat
import string, StringIO
from netkiller import *
"""
class NNTPD(asyncore.dispatcher):
#,threading.Thread threadname
def __init__(self, host, port):
asyncore.dispatcher.__init__ (self)
#threading.Thread.__init__(self, name = threadname)
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.there = (host, port)
here = ('', port + 8000)
self.bind (here)
self.listen (5)
def handle_accept (self):
nntp_receiver (self, self.accept())
def handle_close (self):
self.close()
def run(self):
nntpd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
nntpd.bind(('127.0.0.1', 119))
nntpd.listen(5)
while 1:
mycom = commands('com')
mycom.connect(nntpd)
mycom.start()
time.sleep(1)
except socket.error, msg:
print msg
nntpd.close()
"""
class nntp_server (asyncore.dispatcher):
def __init__ (self, host, port):
asyncore.dispatcher.__init__ (self)
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.there = (host, port)
self.bind (self.there)
self.listen (5)
def handle_connect(self):
pass
def handle_accept (self):
conn, addr = self.accept()
nntp_receiver (self, (conn, addr))
def handle_error(self):
pass
def handle_close (self):
self.close()
class nntp_receiver (asynchat.async_chat):
channel_counter = 0
def __init__ (self, server, (conn, addr)):
asynchat.async_chat.__init__ (self, conn)
self.set_terminator ('\r\n')
self.server = server
#self.id = self.channel_counter
self.channel_counter = self.channel_counter + 1
#self.sender = nntp_sender (self, server.there)
#self.sender.id = self.id
self.buffer = ''
self.handle_connect()
def handle_connect (self):
self.push(Messages.banner)
def collect_incoming_data (self, data):
self.buffer = self.buffer + data
def found_terminator (self):
data = self.buffer
self.buffer = ''
commands(self,data)
#self.handle_close()
#self.send (data + '\r\n')
#self.push (data + '\r\n')
#self.sender.push (data + '\n')
def handle_close (self):
print 'Closing'
self.channel_counter = self.channel_counter - 1
#self.sender.close()
self.close()
"""
class nntp_sender (asynchat.async_chat):
def __init__ (self, receiver, address):
asynchat.async_chat.__init__ (self)
self.receiver = receiver
self.set_terminator (None)
self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
self.buffer = ''
self.set_terminator ('\n')
self.connect (address)
def handle_connect (self):
print 'Connected'
def collect_incoming_data (self, data):
self.buffer = self.buffer + data
def found_terminator (self):
data = self.buffer
self.buffer = ''
print '==> (%d) %s' % (self.id, repr(data))
self.receiver.push (data + '\n')
def handle_close (self):
self.receiver.close()
self.close()
"""
class commands:
#threading.Thread
conn = None
addr = None
buffer = None
msg = None
conn = None
HELP = """
HELP
100 Legal commands
authinfo user Name|pass Password
article [MessageID|Number]
body [MessageID|Number]
check MessageID
date
group newsgroup
head [MessageID|Number]
help
ihave
last
list [active|active.times|newsgroups|subscriptions]
listgroup newsgroup
mode stream
mode reader
newgroups yymmdd hhmmss [GMT] []
newnews newsgroups yymmdd hhmmss [GMT] [ ]
next
post
slave
stat [MessageID|Number]
takethis MessageID
xgtitle [group_pattern]
xhdr header [range|MessageID]
xover [range]
xpat header range|MessageID pat [morepat...]
.
"""
command = ('LIST','MODE READER','GROUP','XOVER')
#def __init__(self, threadname):
#threading.Thread.__init__(self, name = threadname)
def __init__(self, conn,buffer):
self.conn = conn
self.buffer = buffer
self.msg = Messages()
print '<== (%d) %s' % (conn.channel_counter, repr(buffer))
self.nntp(self.buffer)
def welcome(self):
self.conn.send("200 \"Welcome to Netkiller News server\"\r\n")
def nntp(self, buffer):
if not buffer: return True
if buffer[:11] == 'MODE READER':
self.conn.send("200 \"Welcome to NewsFan News server\"\r\n")
#break
elif buffer[:4] == 'LIST':
lists = self.msg.list()
length = str(len(lists))
print length
self.conn.send(length + " list of newsgroups follows\r\n")
for group in lists:
self.conn.send(group+"\r\n")
self.conn.send(".\r\n")
elif buffer[:5] == 'GROUP':
name = buffer[6:]
#last, first = self.msg.group(name)
self.conn.send("211 " + self.msg.group(name) + " "+name+" selected\r\n")
elif buffer[:9] == 'NEWGROUPS':
newgroups = self.msg.newgroups(950803,192708,'GMT')
length = len(newgroups)
self.conn.send(str(length)+ " New newsgroups follow.\r\n")
for name in newgroups:
self.conn.send(name+"\r\n")
self.conn.send(".\r\n")
#break
elif self.buffer[:5] == 'XOVER':
xover = buffer[6:-2]
xover_list = self.msg.xover(10,10)
length = len(xover_list)
self.conn.send("244 xover follows\r\n")
for xo in xover_list:
self.conn.send( xo + "\r\n")
self.conn.send(".\r\n")
elif buffer[:4] =='XHDR':
subject = buffer[5:-2]
#self.msg.xhdr('subject',first,last)
xover_list = self.msg.xover(10,10)
#length = len(xover_list)
self.conn.send(" "+subject+" data follows\r\n")
for xo in xover_list:
self.conn.send( xo + "\r\n")
self.conn.send(".\r\n")
elif buffer[:4] == 'post':
text = ""
self.conn.send("354 Start mail input; end with ;. ;\r\n")
while True:
buffer = self.conn.recv(1024)
text = text + self.buffer
if buffer[-3:] == ".\r\n":
self.conn.send("250 OK\r\n")
break
self.buffer = text
print self.buffer
#break
elif buffer[:4] == 'RSET':
self.conn.send("250 OK\r\n")
#break
elif buffer[:4] =='HELP':
self.conn.send(self.HELP)
elif buffer[:4] =='QUIT':
self.conn.send("221 Closing connection. Good bye.\r\n")
return True
else:
self.conn.send("500 command not recognized\r\n")
return False
def close(self):
self.conn.close()
self.buffer = None
self.conn = None
self.addr = None
class Messages:
banner = '200 \"Welcome to Netkiler News server\"\r\n'
subject = None
mail_from = None
rcpt_to = None
data = None
group = ""
grouplist = (
("cn.comp.linux", 2, 1, "y"),
("cn.comp.freebsd", 3, 1, "y"),
("cn.comp.dos", 10, 4, "y"),
("cn.test", 2, 1, "y"),
("comp.lang.python", 5, 2, "y")
)
def welcome(self):
return 'Welcome'
def list (self):
lists = []
for name, last, first, mode in self.grouplist:
lists.append(name+ " " + str(last) + " " + str(first) +" "+ mode)
return lists
def group(self,groupname):
group_rang = ""
for name, last, first, mode in self.grouplist:
if name == groupname:
group_rang = str(last - first)+" "+ str(last)+" "+str(first)
break
return group_rang
def xover(self,first,last):
xover_tmp = []
xover_tmp.append('4 �?...............重新抢第�? "温柔�?�?" <wryd at newsfan.net> 27 Nov 2004 18:08:00 +0800 <41a85200$1_1 at News.Newsfan.NET> 920 8 Xref: NewsFanServer2 计算�?.网络.网管:4 计算�?.网络.系统集成:3')
xover_tmp.append('5 这样太影响人�? "月风" <cgsyy at 126.com> 27 Nov 2004 19:23:18 +0800<41a863a6_3 at News.Newsfan.NET> 653 3 Xref: NewsFanServer2 计算�?.网络.网管:5')
return xover_tmp
def head(self):
self.xover(first,last)
def xhdr(self,first,last):
xover_tmp = []
xover_tmp.append('1 HI "NNTP.HK" <admin at nntp.hk> 14 Jun 2006 14:43:05 +0800 <448faff9$1 at news.nntp.hk> 1151 31 Xref: news.nntp.hk vip.cicefans:1\r\n')
xover_tmp.append('2 Chen�? "CiceFans" <CiceFans at yahoo.com.hk> 14 Jun 2006 19:50:32 +0800 <448ff808$1 at news.nntp.hk> 994 4 Xref: news.nntp.hk vip.cicefans:2\r\n')
xover_tmp.append('3 Re: Neo�? "CiceFans" <CiceFans at yahoo.com.hk> 14 Jun 2006 19:53:56 +0800 <448ff8d4$1 at news.nntp.hk> <448ff808$1 at news.nntp.hk> 1329 16 Xref: news.nntp.hk vip.cicefans:3\r\n')
xover_tmp.append('4 Re: Chen�? "CiceFans" <CiceFans at yahoo.com.hk> 14 Jun 2006 19:55:19 +0800 <448ff927$1 at news.nntp.hk> <448ff808$1 at news.nntp.hk> 1329 16 Xref: news.nntp.hk vip.cicefans:4\r\n')
return xover_tmp
def newgroups(self,data,time,gmt):
lists = []
lists.append("cn.test.os")
lists.append("cn.test.qa")
return lists
def main():
try:
nntpd = nntp_server('127.0.0.1',119)
asyncore.loop()
except KeyboardInterrupt:
print "Crtl+C pressed. Shutting down."
if __name__ == '__main__':
main()
Neo Chan (netkiller)
Best Regards, VY 73! DE BG7NYT
http://netkiller.hikz.com/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 2959 bytes
Desc: not available
Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20060621/514c952b/smime-0001.bin
2006年06月21日 星期三 17:42
telnet 127.0.0.1 119 测试 200 "Welcome to Netkiler News server" LIST 5 list of newsgroups follows cn.comp.linux 2 1 y cn.comp.freebsd 3 1 y cn.comp.dos 10 4 y cn.test 2 1 y comp.lang.python 5 2 y . Sniffer 看过Outlook访问其它新闻组。也是这样的操作啊。。:( -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060621/9e0c0cdc/attachment.html
2006年06月21日 星期三 17:59
neo又换名openunix了:) 感觉失踪了很久:) ----- Original Message ----- 发件人: openunix 收件人: neo ; python-chinese 发送时间: 2006年6月21日 17:42 主题: Re: [python-chinese]我实现一个基于数据库的新闻组服务器 telnet 127.0.0.1 119 测试 200 "Welcome to Netkiler News server" LIST 5 list of newsgroups follows cn.comp.linux 2 1 y cn.comp.freebsd 3 1 y cn.comp.dos 10 4 y cn.test 2 1 y comp.lang.python 5 2 y . Sniffer 看过Outlook访问其它新闻组。也是这样的操作啊。。:( 您 想 拥 有 abc at 188.com 邮 箱 吗 ? 创 纪 录 16G 超 大 容 量(送 6G 免 费 网 盘),最 高 性 价 比 的 电 子 邮 件 解 决 之 道 ------------------------------------------------------------------------------ _______________________________________________ python-chinese Post: send python-chinese at lists.python.cn Subscribe: send subscribe to python-chinese-request at lists.python.cn Unsubscribe: send unsubscribe to python-chinese-request at lists.python.cn Detail Info: http://python.cn/mailman/listinfo/python-chinese -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060621/cdf403f3/attachment.htm
2006年06月21日 星期三 18:22
哈哈..openunix是我邮箱名字.
neo是ename
netkiller 是nickname
bg7nyt 是 callsign
都是我,这几天搞socket,thread呢..web开发没$$$涂...想能不能改改行.:(
-----原始邮件-----
发件人:"Gavin"
发送时间:2006-06-21 17:59:15
收件人:""
抄送:(无)
主题:Re: [python-chinese]我实现一个基于数据库的新闻组服务器
-----原始邮件-----
发件人:"Gavin"
发送时间:2006-06-21 17:59:15
收件人:""
抄送:(无)
主题:Re: [python-chinese]我实现一个基于数据库的新闻组服务器
null
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060621/17c7ee25/attachment.html
Zeuux © 2025
京ICP备05028076号