我正在尝试发送一个不使用原始套接字、不经过三次握手、不使用sudo的TCP (以及后来的ICMP)数据包。我在python的scapy模块和python的socket模块中尝试了各种方法,但都没有成功。
我知道如果没有三次握手,TCP不一定是TCP -它基本上是UDP,但我正在测试从网络中渗出数据的各种方法,这些方法可能不会被检测到。
基本上这是工作的UDP版本,我需要工作的ICMP和TCP版本,不使用原始套接字,因此不需要管理员/根权限。
最好是GO或Python语言的解决方案,理想情况下我需要在MacOS、Linux和(主要) Windows上运行。
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))
发布于 2017-07-12 08:21:18
简而言之,你不能,至少在Linux下不能。
您正在尝试发送数据包,而不遵守TCP的状态机。如果不使用数据包套接字(直接或通过pcap
或scapy
等库),内核将不允许这样做,并且原始套接字需要CAP_NET_RAW
功能,这通常只授予超级用户。
发布于 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 +-+-+|源|目标||端口|端口|+-+-+|长度|校验和|+数据八位字节... +- ...用户数据报头格式
https://stackoverflow.com/questions/45036882
复制相似问题