Preventing TCP SYN retry in netcat (for port knocking)

混江龙づ霸主 提交于 2021-02-19 03:14:46

问题


I'm trying to write the linux client script for a simple port knocking setup. My server has iptables configured to require a certain sequence of TCP SYN's to certain ports for opening up access. I'm able to successfully knock using telnet or manually invoking netcat (Ctrl-C right after running the command), but failing to build an automated knock script.

My attempt at an automated port knocking script consists simply of "nc -w 1 x.x.x.x 1234" commands, which connect to x.x.x.x port 1234 and timeout after one second. The problem, however, seems to be the kernel(?) doing automated SYN retries. Most of the time more than one SYN is being send during the 1 second nc tries to connect. I've checked this with tcpdump.

So, does anyone know how to prevent the SYN retries and make netcat simply send only one SYN per connection/knock attempt? Other solutions which do the job are also welcome.


回答1:


Yeah, I checked that you may use nc too!:

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

The magic comes from (-z: zero-I/O mode)...




回答2:


You may use nmap for port knocking (SYN). Just exec:

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



回答3:


You can't prevent the TCP/IP stack from doing what it is expressly designed to do.




回答4:


try this (as root):

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

or this:

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


来源:https://stackoverflow.com/questions/11504493/preventing-tcp-syn-retry-in-netcat-for-port-knocking

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!