防止netcat中的TCP SYN重试(用于端口敲门)

防止netcat中的TCP SYN重试(用于端口敲门),tcp,netcat,Tcp,Netcat,我正在尝试为一个简单的端口敲击设置编写linux客户端脚本。我的服务器配置了iptables,需要特定序列的TCP-SYN到特定端口才能打开访问。我能够使用telnet或手动调用netcat成功地敲打(在运行命令后立即使用Ctrl-C),但无法构建自动敲打脚本 我尝试使用一个自动端口敲击脚本,它只包含“nc-w 1 x.x.x.x 1234”命令,这些命令连接到x.x.x.x端口1234,并在一秒钟后超时。然而,问题似乎是内核(?)在进行自动同步重试。大多数情况下,在nc尝试连接的1秒时间内发送

我正在尝试为一个简单的端口敲击设置编写linux客户端脚本。我的服务器配置了iptables,需要特定序列的TCP-SYN到特定端口才能打开访问。我能够使用telnet或手动调用netcat成功地敲打(在运行命令后立即使用Ctrl-C),但无法构建自动敲打脚本

我尝试使用一个自动端口敲击脚本,它只包含“nc-w 1 x.x.x.x 1234”命令,这些命令连接到x.x.x.x端口1234,并在一秒钟后超时。然而,问题似乎是内核(?)在进行自动同步重试。大多数情况下,在nc尝试连接的1秒时间内发送多个SYN。我已经和tcpdump检查过了


那么,是否有人知道如何防止SYN重试并使netcat每次连接/敲打尝试只发送一个SYN?其他解决方案也很受欢迎。

您不能阻止TCP/IP堆栈执行其明确设计的功能。

尝试以下方法(以root用户身份):

或者这个:

int sc = 1;
setsockopt(sock, IPPROTO_TCP, TCP_SYNCNT, &sc, sizeof(sc));

您可以将nmap用于端口敲门(SYN)。行政长官:

for p in 1000 2000 3000; do 
  nmap -Pn --max-retries 0 -p $p example.net;     
done

是的,我检查过你也可以使用nc!:

$ nc -z example.net 1000 2000 3000; ssh example.net
魔法来自(-z:zero-I/O模式)

$ nc -z example.net 1000 2000 3000; ssh example.net