美文网首页
构造icmp包python-socket-代码示例

构造icmp包python-socket-代码示例

作者: 平解技术控 | 来源:发表于2019-06-23 14:32 被阅读0次

一、最基本的功能

完成第一个demo:

#!/bin/env/python

import socket
import struct
import os
import time

# create icmp socket
def create_socket():
    proto = 'ICMP'
    try:
        icmp_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
        print icmp_socket
    except Exception as e:
        raise e
    return icmp_socket


# generate icmp data
def generate_pkg():
   ## ICMP pkg header
   pkt_id = os.getpid()
   ident = 0
   pkg_header = struct.pack("!BBHHH", 8, 0, 0, pkt_id, ident)
   payload = struct.pack("d", time.time())
   pkg = pkg_header+payload
   return pkg


def send_pkg(icmp_socket,pkt,dst_addr):
    icmp_socket.sendto(pkt,dst_addr)


if __name__ == '__main__':
    icmp_socket = create_socket()
    pkt = generate_pkg()
    dst_addr = '61.135.169.121'
    real_dst_addr = (dst_addr, 0)
    send_pkg(icmp_socket, pkt, real_dst_addr)

通过抓包看下组包是否正确


image.png

可以看出有两个问题:
1、checksum 写的是0,提示错误
2、没有收到对端的回包,正常给8.8.8.8发ping是可以回的,应该是这个组包不正确,所以没有收到回包

checksum早在学习通信的时候就知道,是为了防止远距离通信过程中,传的数据被篡改,checksum在网络传输中有自己的计算方法。这篇文章非常详细的介绍了checksum如何计算:
https://blog.csdn.net/qq_37174526/article/details/88407884

相关文章

网友评论

      本文标题:构造icmp包python-socket-代码示例

      本文链接:https://www.haomeiwen.com/subject/ncviqctx.html