Portál AbcLinuxu, 12. května 2025 09:24

Dotaz: python - TCP spojeni (kontrola otevreneho portu)

ladaan avatar 10.7.2007 14:11 ladaan | skóre: 9 | Tišnov
python - TCP spojeni (kontrola otevreneho portu)
Přečteno: 1273×
Odpovědět | Admin
Ahoj, chtel bych testovat servery, pomoci pythonu, jestli na urcitem portu naslouchaji nebo ne. Pro zacatek uvedu jake vysledky potrebuji. Pri poslani SYN flagu bych mel dostat:
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.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

ladaan avatar 10.7.2007 16:18 ladaan | skóre: 9 | Tišnov
Rozbalit Rozbalit vše Re: python - TCP spojeni (kontrola otevreneho portu)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem si to uz vyresil. Chtel jsem toto:
#!/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.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.