我正在尝试为简单的端口敲门设置编写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?其他解决方案也很受欢迎。
答案 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));