我正在尝试制作一个简单的端口扫描程序:
socket.setdefaulttimeout(1)
try:
for port in range(lowport,highport):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.settimeout(1)
x = s.connect_ex((remoteServerIP, port))
if x == 0:
print "[+] Port {}: Open".format(port)
try:
s.settimeout(7)
s.send("blah")
print s.recv(100)
我的问题是,在' if'之后,套接字超时是否会恢复到默认值(1)。语句完成(因为我认为它应该并且是大多数python)或者我是否需要在迭代中明确地将它放置在'中。我在上面注释了内联的每个端口。目标是超时(1)查看端口是否打开,但是(7)接收横幅..
答案 0 :(得分:2)
来自socket.setdefaulttimeout
的文档:
socket.setdefaulttimeout(timeout)
以秒为单位设置默认超时 ( float )用于新的套接字对象。值
None
表示新值 套接字对象没有超时。套接字模块是第一个 导入,默认为None
。
超时是您在程序开始时设置的一个可配置参数,并且在执行期间保持超时,除非您再次明确更改它。
如果套接字通过设置自己的超时来覆盖默认套接字,则其他套接字不会受到影响。