前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scapy构造任意包实例

scapy构造任意包实例

原创
作者头像
cdh
发布2022-04-13 14:22:45
2K0
发布2022-04-13 14:22:45
举报
文章被收录于专栏:笔记+

安装方法:

pip3 install scapy

1. 10.20.0.5运行server.pyq启动一个监听端口为7000的tcp server端

# ./server.py

# cat server.py

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import socket

HOST = '0.0.0.0'

PORT = 7000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

s.bind((HOST, PORT))

s.listen(5)

print('server start at: %s:%s' % (HOST, PORT))

print('wait for connection...')

while True:

conn, addr = s.accept()

print('connected by ' + str(addr))

while True:

indata = conn.recv(1024)

if len(indata) == 0: # connection closed

conn.close()

print('client closed connection.')

break

print('recv: ' + indata.decode())

# outdata = 'echo ' + indata.decode()

# conn.send(outdata.encode())

2. 在server端启动抓包,加-S显示绝对序列号:

tcpdump -i any host 10.20.0.13 and tcp port 7000 -nn -vv -S

3. 10.20.0.13作为客户端运行client.py启动tcp连接server的

4. 步骤3启动client端后通过抓包可以看到已建立连接的四元组信息:

client ip:10.20.0.13

client port:47066

server ip: 10.20.0.5

server port: 7000

客户端当前最后一个报文的seq和ack号如下:

seq 1076722322, ack 3291023708

5. 根据四元组信息和seq以及ack信息在client端构造scapy报文信息发送给server端7000端口:

ip = IP(src='10.20.0.13', dst='10.20.0.5')

tcp = TCP(sport=47066, dport=7000,flags='PA', seq=1076722322,ack=3291023708)

payload="hello,scapy!"

send(ip/tcp/payload)

6. 此时server端可以收到client端scapy构造的信息:

对应抓包信息:

说明下这里flags对应要发送数据包的类型,这里为PA代表要发送的tcp报文带有数据和ack信息:

tcp = TCP(sport=47066, dport=7000,flags='PA', seq=1076722322,ack=3291023708)

如果只是发送SYN报文则:

flags='S'

如果只是发送ACK报文则:

flags='A'

如果只是发送RST报文则:

flags='R'

如果发送FIN+ACK报文则:

flasg=‘FA’

参考:

https://www.firewall.cx/networking-topics/protocols/tcp/136-tcp-flag-options.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档