Portál AbcLinuxu, 12. května 2025 09:24
1) odpoved SYN/ACK (na tomto portu se nasloucha) 2) odpoved RST/ACK (port je zavreny) 3) zadna odpoved (server nebezi nebo filtruje pakety)K tomuto jsem nasel kus kodu v Pythonu:
#!/usr/bin/env python import socket HOST = 'seznam.cz' PORT = 5060 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) s.send('Hello, world') data = s.recv(1024) s.close() print 'Received', repr(data)V pripade, kdyz na serveru port je otevren a nasloucha, tak bych mel dostat SYN/ACK, ale ten dostanu az po Ctrl+C (KeyboardInterrupt). Tuto odpoved bych potreboval pred Ctrl+C, protoze program(klient) zustane "viset" a nic se nedeje. Stacilo by me take po nejake dobe(timeout), aby "vyskocil z cekani". V lepsim pripade dostanu "Connection refused", kdyz nenasloucha na danem portu. Jakym zpusobem by slo kod osetrit, abych se dozvedel, ze opravdu nasloucha a samozrejme jak by se to dalo osetrit i pro ostatni pripady uvedene vyse? Kod je cisty Hello World client a zatim se tak nejak ucim. Diky.
#!/usr/bin/env python from socket import * HOST = 'seznam.cz' PORT = 5060 s = socket(AF_INET, SOCK_STREAM) s.setblocking(0) s.settimeout(1.0) try: s.connect((HOST, PORT)) print "nasloucha" except error: print "nic nenasloucha" s.close()Servery, kde maji firewall a pri spojeni RST/ACK klientovi nedojde, tak zustane viset a ceka az vyprsi timeout. Zavedenim non-blocking modu a nastaveni timeoutu se mne vrati socket error drive. Takze vyreseno.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.