我正在尝试发送一个不使用原始套接字的TCP(以及后来的ICMP)数据包,不进行三次握手,并且不使用sudo。我在python的scapy模块和python的套接字模块中尝试过各种方法,但没有成功。
据我所知,如果没有三方握手,TCP不一定是TCP - 它基本上是UDP,但我正在测试从网络中泄露数据的各种方法,这些方法可能无法检测到。
基本上这是工作的UDP版本,我需要使用不使用原始套接字的ICMP和TCP版本,因此不需要admin / root权限。
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))
答案 0 :(得分:2)
简而言之 - 你不能,至少不能在Linux下。
您正在尝试发送数据包而不遵守TCP的状态机。如果不使用数据包套接字(直接或通过诸如const util = require('util');
const fs = require('fs');
const stat = util.promisify(fs.stat);
// usage of promisified function
stat('.').then((stats) => {
// Do something with `stats`
}).catch((error) => {
// Handle the error.
});
或pcap
之类的库),内核将不允许您这样做,并且原始套接字需要scapy
功能,这是通常只授予超级用户。
答案 1 :(得分:0)
TCP是面向连接的协议。为了建立TCP连接,必须执行三次握手。您的操作系统中的TCP模块在建立连接之前不会发送数据,并且任何接收到不存在连接的TCP段的设备都将忽略它。
没有连接的TCP不是TCP,但也不是UDP。 TCP和UDP具有不同的协议头。您会注意到TCP标头的字段多于UDP标头,其中许多字段将由握手信息填充。
RFC 793, Transmission Control Protocol:
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 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TCP Header Format
RFC 768, User Datagram Protocol:
格式
0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source | Destination | | Port | Port | +--------+--------+--------+--------+ | | | | Length | Checksum | +--------+--------+--------+--------+ | | data octets ... +---------------- ... User Datagram Header Format