python udp伪造ip_python伪造udp数据包

#!/usr/bin/python

#coding:utf-8

import socket

import struct

from random import randint

def checksum(data):

s = 0

n = len(data) % 2

for i in range(0, len(data) - n, 2):

s += ord(data[i]) + (ord(data[i + 1]) << 8)

if n:

s += ord(data[i + 1])

while (s >> 16):

s = (s & 0xFFFF) + (s >> 16)

s = ~s & 0xffff

return s

class IP(object):

def __init__(self, source, destination, payload='', proto=socket.IPPROTO_TCP):

self.version = 4

self.ihl = 5 # Internet Header Length

self.tos = 0 # Type of Service

self.tl = 20 + len(payload)

self.id = 0 # random.randint(0, 65535)

self.flags = 0 # Don't fragment

self.offset = 0

self.ttl = 255

self.protocol = proto

self.checksum = 2 # will be filled by kernel

self.source = socket.inet_aton(source)

self.destination = socket.inet_aton(destination)

def pack(self):

ver_ihl = (self.version << 4) + self.ihl

flags_offset = (self.flags << 13) + self.offset

ip_header = struct.pack("!BBHHHBBH4s4s",

ver_ihl,

self.tos,

self.tl,

self.id,

flags_offset,

self.ttl,

self.protocol,

self.checksum,

self.source,

self.destination)

self.checksum = checksum(ip_header)

ip_header = struct.pack("!BBHHHBBH4s4s",

ver_ihl,

self.tos,

self.tl,

self.id,

flags_offset,

self.ttl,

self.protocol,

socket.htons(self.checksum),

self.source,

self.destination)

return ip_header

class UDP(object):

def __init__(self, src, dst, payload=''):

# def __init__(self, src, dst):

self.src = src

self.dst = dst

self.payload = payload

self.checksum = 0

self.length = 8 # UDP Header length

def pack(self, src, dst, proto=socket.IPPROTO_UDP):

length = self.length + len(self.payload)

pseudo_header = struct.pack('!4s4sBBH',

socket.inet_aton(src), socket.inet_aton(dst), 0,

proto, length)

self.checksum = checksum(pseudo_header)

packet = struct.pack('!HHHH',

self.src, self.dst, length, 0)

return packet

s = socket.socket(socket.AF_INET,

socket.SOCK_RAW,

socket.IPPROTO_RAW)

fakesrc = "10.1.1.1"

dst = "175.155.234.155"

dstport = 1900

payload = "UDP fake packet test"

# packobj = UDP(fakesrc, dst, payload)

# packet = packobj.pack(fakesrc, dst)

# s.sendto(packet, (dst, dstport))

udp = UDP(randint(1, 65535), dstport, payload).pack(fakesrc, dst)

ip = IP(fakesrc, dst, udp, proto=socket.IPPROTO_UDP).pack()

s.sendto(ip + udp + payload, (dst, dstport))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值