dropcatch 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.4
2
+ Name: dropcatch
3
+ Version: 0.1.0
4
+ Summary: NASK (.pl) domain lifecycle tracker and raw WHOIS parser for drop-catching automation.
5
+ Author-email: Rylse Solutions <hello@rylse.com>
6
+ License-Expression: MIT
7
+ Keywords: dropcatch,nask,dns.pl,whois,domain-sniping,pl-domains,seo
8
+ Requires-Python: >=3.8
9
+ Description-Content-Type: text/markdown
10
+
11
+ # 🎯 dropcatch (alpha) for (NASK / .pl Edition)
12
+
13
+ A specialized, zero-dependency Python utility for monitoring the lifecycle of Polish `.pl` domains directly via the NASK WHOIS registry (`whois.dns.pl`).
14
+
15
+ Built for drop-catchers, SEO professionals, and domain investors who need raw socket connections without third-party API limits.
16
+
17
+ ## ⚡ Installation
18
+
19
+ ```bash
20
+ pip install dropcatch
21
+ ```
22
+
23
+ ## 🚀 Usage
24
+ dropcatch connects directly to port 43 of the Polish registry, parses the proprietary text format, and computes exact drop windows.
25
+
26
+ ```bash
27
+ import dropcatch
28
+
29
+ # Query a .pl domain directly from NASK registry
30
+ domain = dropcatch.query_nask("nask.pl")
31
+
32
+ print(f"Domain: {domain.name}")
33
+ print(f"Status: {domain.status}")
34
+ print(f"Expiration Date: {domain.expiration_date}")
35
+
36
+ # Check if it's currently in the 30-day blind period before deletion
37
+ if domain.is_blocked:
38
+ print(f"Domain is BLOCKED. Will drop around: {domain.estimated_drop_date}")
39
+ ```
40
+
41
+ ## Additional domain registries
42
+ Support for additional domain registries will be added over time. If you'd like to support the development of this dropcatch library, feel free to reach out to us via email.
43
+
44
+ ## ⚠️ Disclaimer
45
+ This package is provided for informational and monitoring purposes only. Excessive querying may result in your IP being temporarily blocked by the NASK registry rate limiters. Use responsibly and do not hammer the WHOIS servers.
@@ -0,0 +1,35 @@
1
+ # 🎯 dropcatch (alpha) for (NASK / .pl Edition)
2
+
3
+ A specialized, zero-dependency Python utility for monitoring the lifecycle of Polish `.pl` domains directly via the NASK WHOIS registry (`whois.dns.pl`).
4
+
5
+ Built for drop-catchers, SEO professionals, and domain investors who need raw socket connections without third-party API limits.
6
+
7
+ ## ⚡ Installation
8
+
9
+ ```bash
10
+ pip install dropcatch
11
+ ```
12
+
13
+ ## 🚀 Usage
14
+ dropcatch connects directly to port 43 of the Polish registry, parses the proprietary text format, and computes exact drop windows.
15
+
16
+ ```bash
17
+ import dropcatch
18
+
19
+ # Query a .pl domain directly from NASK registry
20
+ domain = dropcatch.query_nask("nask.pl")
21
+
22
+ print(f"Domain: {domain.name}")
23
+ print(f"Status: {domain.status}")
24
+ print(f"Expiration Date: {domain.expiration_date}")
25
+
26
+ # Check if it's currently in the 30-day blind period before deletion
27
+ if domain.is_blocked:
28
+ print(f"Domain is BLOCKED. Will drop around: {domain.estimated_drop_date}")
29
+ ```
30
+
31
+ ## Additional domain registries
32
+ Support for additional domain registries will be added over time. If you'd like to support the development of this dropcatch library, feel free to reach out to us via email.
33
+
34
+ ## ⚠️ Disclaimer
35
+ This package is provided for informational and monitoring purposes only. Excessive querying may result in your IP being temporarily blocked by the NASK registry rate limiters. Use responsibly and do not hammer the WHOIS servers.
@@ -0,0 +1,4 @@
1
+ from .nask import PLDomain, query_nask, LEGAL_DISCLAIMER
2
+
3
+ __version__ = "0.2.0"
4
+ __all__ = ["PLDomain", "query_nask", "LEGAL_DISCLAIMER"]
@@ -0,0 +1,89 @@
1
+ import socket
2
+ import re
3
+ from dataclasses import dataclass
4
+ from datetime import datetime, timedelta
5
+ from typing import Optional, Dict, Any
6
+
7
+ NASK_WHOIS_SERVER = "whois.dns.pl"
8
+ NASK_WHOIS_PORT = 43
9
+ TIMEOUT_SECONDS = 5.0
10
+
11
+ LEGAL_DISCLAIMER = "Informational utility. Subject to NASK registry rate limits."
12
+
13
+ @dataclass
14
+ class PLDomain:
15
+ name: str
16
+ status: str
17
+ expiration_date: Optional[datetime] = None
18
+ created_date: Optional[datetime] = None
19
+ raw_response: str = ""
20
+
21
+ @property
22
+ def is_blocked(self) -> bool:
23
+ """NASK sets status to BLOCKED for ~30 days after expiration."""
24
+ return "BLOCKED" in self.status.upper() or "TERMINATED" in self.status.upper()
25
+
26
+ @property
27
+ def estimated_drop_date(self) -> Optional[datetime]:
28
+ """
29
+ If a .pl domain is BLOCKED, it usually drops 30 days after expiration.
30
+ Note: Exact hour of deletion varies.
31
+ """
32
+ if self.expiration_date and self.is_blocked:
33
+ return self.expiration_date + timedelta(days=30)
34
+ return None
35
+
36
+ def summary(self) -> Dict[str, Any]:
37
+ return {
38
+ "domain": self.name,
39
+ "status": self.status,
40
+ "is_blocked": self.is_blocked,
41
+ "expiration_date": self.expiration_date.isoformat() if self.expiration_date else None,
42
+ "estimated_drop_date": self.estimated_drop_date.isoformat() if self.estimated_drop_date else None,
43
+ "disclaimer": LEGAL_DISCLAIMER
44
+ }
45
+
46
+
47
+ def query_nask(domain: str) -> PLDomain:
48
+ """
49
+ Connects directly to whois.dns.pl over TCP Port 43 and parses the .pl domain status.
50
+ """
51
+ if not domain.lower().endswith(".pl"):
52
+ raise ValueError("dropcatch currently only supports .pl domains (NASK registry).")
53
+
54
+ # 1. Connect directly to WHOIS server
55
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
56
+ s.settimeout(TIMEOUT_SECONDS)
57
+ s.connect((NASK_WHOIS_SERVER, NASK_WHOIS_PORT))
58
+ s.send(f"{domain}\r\n".encode("utf-8"))
59
+
60
+ response = b""
61
+ while True:
62
+ data = s.recv(4096)
63
+ if not data:
64
+ break
65
+ response += data
66
+
67
+ raw_text = response.decode("utf-8", errors="replace")
68
+
69
+ # 2. Parse the proprietary NASK format using Regex
70
+ status_match = re.search(r"^\s*status:\s*(.+)$", raw_text, re.IGNORECASE | re.MULTILINE)
71
+ exp_match = re.search(r"^\s*option expiration date:\s*(.+)$", raw_text, re.IGNORECASE | re.MULTILINE)
72
+
73
+ status = status_match.group(1).strip() if status_match else "UNKNOWN / NOT FOUND"
74
+
75
+ expiration_date = None
76
+ if exp_match:
77
+ try:
78
+ # NASK format: 2026.09.29 12:00:00
79
+ date_str = exp_match.group(1).strip()
80
+ expiration_date = datetime.strptime(date_str, "%Y.%m.%d %H:%M:%S")
81
+ except ValueError:
82
+ pass
83
+
84
+ return PLDomain(
85
+ name=domain,
86
+ status=status,
87
+ expiration_date=expiration_date,
88
+ raw_response=raw_text
89
+ )
@@ -0,0 +1,45 @@
1
+ Metadata-Version: 2.4
2
+ Name: dropcatch
3
+ Version: 0.1.0
4
+ Summary: NASK (.pl) domain lifecycle tracker and raw WHOIS parser for drop-catching automation.
5
+ Author-email: Rylse Solutions <hello@rylse.com>
6
+ License-Expression: MIT
7
+ Keywords: dropcatch,nask,dns.pl,whois,domain-sniping,pl-domains,seo
8
+ Requires-Python: >=3.8
9
+ Description-Content-Type: text/markdown
10
+
11
+ # 🎯 dropcatch (alpha) for (NASK / .pl Edition)
12
+
13
+ A specialized, zero-dependency Python utility for monitoring the lifecycle of Polish `.pl` domains directly via the NASK WHOIS registry (`whois.dns.pl`).
14
+
15
+ Built for drop-catchers, SEO professionals, and domain investors who need raw socket connections without third-party API limits.
16
+
17
+ ## ⚡ Installation
18
+
19
+ ```bash
20
+ pip install dropcatch
21
+ ```
22
+
23
+ ## 🚀 Usage
24
+ dropcatch connects directly to port 43 of the Polish registry, parses the proprietary text format, and computes exact drop windows.
25
+
26
+ ```bash
27
+ import dropcatch
28
+
29
+ # Query a .pl domain directly from NASK registry
30
+ domain = dropcatch.query_nask("nask.pl")
31
+
32
+ print(f"Domain: {domain.name}")
33
+ print(f"Status: {domain.status}")
34
+ print(f"Expiration Date: {domain.expiration_date}")
35
+
36
+ # Check if it's currently in the 30-day blind period before deletion
37
+ if domain.is_blocked:
38
+ print(f"Domain is BLOCKED. Will drop around: {domain.estimated_drop_date}")
39
+ ```
40
+
41
+ ## Additional domain registries
42
+ Support for additional domain registries will be added over time. If you'd like to support the development of this dropcatch library, feel free to reach out to us via email.
43
+
44
+ ## ⚠️ Disclaimer
45
+ This package is provided for informational and monitoring purposes only. Excessive querying may result in your IP being temporarily blocked by the NASK registry rate limiters. Use responsibly and do not hammer the WHOIS servers.
@@ -0,0 +1,8 @@
1
+ README.md
2
+ pyproject.toml
3
+ dropcatch/__init__.py
4
+ dropcatch/nask.py
5
+ dropcatch.egg-info/PKG-INFO
6
+ dropcatch.egg-info/SOURCES.txt
7
+ dropcatch.egg-info/dependency_links.txt
8
+ dropcatch.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ dropcatch
@@ -0,0 +1,19 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "dropcatch"
7
+ version = "0.1.0"
8
+ description = "NASK (.pl) domain lifecycle tracker and raw WHOIS parser for drop-catching automation."
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.8"
12
+ authors = [
13
+ { name = "Rylse Solutions", email = "hello@rylse.com" },
14
+ ]
15
+ keywords = ["dropcatch", "nask", "dns.pl", "whois", "domain-sniping", "pl-domains", "seo"]
16
+
17
+ [tool.setuptools.packages.find]
18
+ where = ["."]
19
+ include = ["dropcatch*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+