Python论坛  - 讨论区

标题:[python-chinese] 请问在python下如何构建一个ICMP类似的IP包然后发出去?

2004年09月07日 星期二 15:34

River river at exoweb.net
Tue Sep 7 15:34:22 HKT 2004

C下很容易实现,但在python下能否进行呢,
虽然这不是python的擅长。
能否举个简单例子,谢谢。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20040907/4cfca0fb/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年09月07日 星期二 15:38

GreyRoar GreyRoar at tom.com
Tue Sep 7 15:38:19 HKT 2004

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






[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年09月07日 星期二 16:01

梅劲松  stephen.cn at gmail.com
Tue Sep 7 16:01:36 HKT 2004

这个例子你看一下。
怎么没人回答我的问题呢?郁闷。

#!/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


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号