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

时间:2012-07-16 12:38:37

标签: tcp netcat

我正在尝试为简单的端口敲门设置编写linux客户端脚本。我的服务器配置了iptables,要求某些端口的某些TCP SYN进行开放访问。我能够使用telnet成功敲击或者手动调用netcat(运行命令后立即执行Ctrl-C),但无法构建自动敲击脚本。

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

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

4 个答案:

答案 0 :(得分:2)

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

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

魔法来自(-z:零I / O模式)......

答案 1 :(得分:1)

您可以使用nmap进行端口敲门(SYN)。只是执行:

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

答案 2 :(得分:0)

您无法阻止TCP / IP堆栈执行明确设计的操作。

答案 3 :(得分:0)

试试这个(以root身份):

echo 1 >  /proc/sys/net/ipv4/tcp_syn_retries

或者这个:

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