qq_43412960
2019-10-21 18:32
采纳率: 79.1%
浏览 135

这是一个关于PYTHON的socket问题

import  time
import  array
def jiaoyan(pack):
    if len(pack)%2==1:
        pack+=b'\0'
    words=array.array('h',pack)
    sum=0
    for word in words:
        sum += word
        sum = (sum >> 16) + (sum & 0xffff)
        sum = (sum >> 16) + (sum & 0xffff)
    return (~sum) & 0xffff


icmp=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)
icmp.settimeout(3)


header = struct.pack('bbHHh', 8,0,0,1234, 1)
data=struct.pack('5s',b'haasd')


print(jiaoyan(header+data))

icmp.sendto(header+data, ('127.0.0.1', 1))

我想完成一个icmp的封装 然后发给自己 我用回文地址127.0.0.1,来发给自己。封装icmp的时候,我用jiaoyan方法整了个产生校验码位的函数。初始的校验码为0.这是我的思路,但是最后发icmp包的时候出错了 。好奇怪

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • soar3033 2019-10-21 21:41
    已采纳

    在头上加上import socket import struck。你这库都没引用运行当然有问题

    打赏 评论