2004年09月07日 星期二 15:34
C下很容易实现,但在python下能否进行呢, 虽然这不是python的擅长。 能否举个简单例子,谢谢。 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20040907/4cfca0fb/attachment.html
2004年09月07日 星期二 15:38
Wang Chao,您好! 个人觉得你这样的情况用字典不是特别好,要是用list里面嵌list的办法倒是可以用list.sort(func)的办法按一定条件排序。 ======= 2004-09-06 23:56:00 您在来信中写道:======= >现在已经有一个字典,Keys是英文单词,Values是这个单词在文件中出现的次数。 >想要给这个字典重新排序,让出现次数最多的单词排第一位,出现次数最少的排最后。 > >我尝试把字典里的values放入一个list里,在对list排序,但是好像排完也没有什么意义。很多单词的values值一样,就是排完也没有办法把把排序结果应用回原来的字典里。 > >我能想当的另一个方案是,每个单词和后面的所有词比较,当遇到values比他大的,就改为values更大的单词开始比较,如果到最后都没有比他大的,就把这个词写入新字典里,同时在旧字典里删除自己,但是好像太弱智了点。 > > >不知道还有什么其他更好地解决方案。 > >谢谢~~~ > >基础太差,时间又太紧,我问题好多,学得好辛苦 。 :( > > >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese = = = = = = = = = = = = = = = = = = = = 致 礼! GreyRoar GreyRoar at tom.com 2004-09-07
2004年09月07日 星期二 16:01
这个例子你看一下。 怎么没人回答我的问题呢?郁闷。 #!/usr/bin/env python2 import pcap import sys import string import time import socket import struct protocols={socket.IPPROTO_TCP:'tcp', socket.IPPROTO_UDP:'udp', socket.IPPROTO_ICMP:'icmp'} def decode_ip_packet(s): d={} d['version']=(ord(s[0]) & 0xf0) >> 4 d['header_len']=ord(s[0]) & 0x0f d['tos']=ord(s[1]) d['total_len']=socket.ntohs(struct.unpack('H',s[2:4])[0]) d['id']=socket.ntohs(struct.unpack('H',s[4:6])[0]) d['flags']=(ord(s[6]) & 0xe0) >> 5 d['fragment_offset']=socket.ntohs(struct.unpack('H',s[6:8])[0] & 0x1f) d['ttl']=ord(s[8]) d['protocol']=ord(s[9]) d['checksum']=socket.ntohs(struct.unpack('H',s[10:12])[0]) d['source_address']=pcap.ntoa(struct.unpack('i',s[12:16])[0]) d['destination_address']=pcap.ntoa(struct.unpack('i',s[16:20])[0]) if d['header_len']>5: d['options']=s[20:4*(d['header_len']-5)] else: d['options']=None d['data']=s[4*d['header_len']:] return d def dumphex(s): bytes = map(lambda x: '%.2x' % x, map(ord, s)) for i in xrange(0,len(bytes)/16): print ' %s' % string.join(bytes[i*16:(i+1)*16],' ') print ' %s' % string.join(bytes[(i+1)*16:],' ') def print_packet(pktlen, data, timestamp): if not data: return if data[12:14]=='\x08\x00': decoded=decode_ip_packet(data[14:]) print '\n%s.%f %s > %s' % (time.strftime('%H:%M', time.localtime(timestamp)), timestamp % 60, decoded['source_address'], decoded['destination_address']) for key in ['version', 'header_len', 'tos', 'total_len', 'id', 'flags', 'fragment_offset', 'ttl']: print ' %s: %d' % (key, decoded[key]) print ' protocol: %s' % protocols[decoded['protocol']] print ' header checksum: %d' % decoded['checksum'] print ' data:' dumphex(decoded['data']) if __name__=='__main__': if len(sys.argv) < 3: print 'usage: sniff.py' sys.exit(0) p = pcap.pcapObject() dev = sys.argv[1] net, mask = pcap.lookupnet(dev) # note: to_ms does nothing on linux p.open_live(dev, 1600, 0, 100) p.setfilter(string.join(sys.argv[2:],' '), 0, 0) try: while 1: p.dispatch(1, print_packet) except KeyboardInterrupt: print '%s' % sys.exc_type print 'shutting down' print '%d packets received, %d packets dropped, %d packets dropped by interface' % p.stats() ----- Original Message ----- From: River <river at exoweb.net> Date: Tue, 7 Sep 2004 15:34:22 +0800 Subject: [python-chinese] 请问在python下如何构建一个I CMP类似的IP包然后发出去? To: python-chinese at lists.python.cn C下很容易实现,但在python下能否进行呢, 虽然这不是python的擅长。 能否举个简单例子,谢谢。 _______________________________________________ python-chinese list python-chinese at lists.python.cn http://python.cn/mailman/listinfo/python-chinese
Zeuux © 2025
京ICP备05028076号