首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在没有sudo -没有三次握手的情况下发送自定义'TCP‘数据包

如何在没有sudo -没有三次握手的情况下发送自定义'TCP‘数据包
EN

Stack Overflow用户
提问于 2017-07-11 22:07:28
回答 2查看 1.4K关注 0票数 0

我正在尝试发送一个不使用原始套接字、不经过三次握手、不使用sudo的TCP (以及后来的ICMP)数据包。我在python的scapy模块和python的socket模块中尝试了各种方法,但都没有成功。

我知道如果没有三次握手,TCP不一定是TCP -它基本上是UDP,但我正在测试从网络中渗出数据的各种方法,这些方法可能不会被检测到。

基本上这是工作的UDP版本,我需要工作的ICMP和TCP版本,不使用原始套接字,因此不需要管理员/根权限。

最好是GO或Python语言的解决方案,理想情况下我需要在MacOS、Linux和(主要) Windows上运行。

代码语言:javascript
运行
复制
UDP_IP = "127.0.0.1"
UDP_PORT = 5005
MESSAGE = "Data to exfiltrate"

sock = socket.socket(socket.AF_INET, # Internet
             socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
EN

回答 2

Stack Overflow用户

发布于 2017-07-12 08:21:18

简而言之,你不能,至少在Linux下不能。

您正在尝试发送数据包,而不遵守TCP的状态机。如果不使用数据包套接字(直接或通过pcapscapy等库),内核将不允许这样做,并且原始套接字需要CAP_NET_RAW功能,这通常只授予超级用户。

票数 4
EN

Stack Overflow用户

发布于 2017-07-12 00:06:43

TCP是一种面向连接的协议。为了建立TCP连接,您必须执行三次握手。在建立连接之前,操作系统中的TCP模块不会发送数据,并且任何接收到不存在连接的TCP段的设备都会忽略它。

没有连接的TCP不是TCP,但也不是UDP。TCP和UDP具有不同的协议报头。您会注意到,TCP报头比UDP报头具有更多的字段,其中许多字段将由握手信息填充。

TCP报头格式

0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|源端口|目的端口| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |序列号+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |确认号|+--+-+|数据| |U|A|P|R|S|F| Offset|保留|R|C|S|S|Y|I| Window |G|K|H|T|N|N| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |校验和|紧急指针| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|选项|填充| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TCP头部格式

格式

0 7 8 15 16 23 24 31 +-+-+|源|目标||端口|端口|+-+-+|长度|校验和|+数据八位字节... +- ...用户数据报头格式

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45036882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档