Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.1.1 & Your IP : 52.15.225.105
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
lib /
python3 /
dist-packages /
twisted /
protocols /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2024-11-28 06:59
haproxy
[ DIR ]
drwxr-xr-x
2024-11-28 06:59
test
[ DIR ]
drwxr-xr-x
2024-11-28 06:59
__init__.py
397
B
-rw-r--r--
2022-02-07 13:12
amp.py
94.23
KB
-rw-r--r--
2022-02-07 13:12
basic.py
30.9
KB
-rw-r--r--
2022-02-07 13:12
dict.py
10.64
KB
-rw-r--r--
2022-02-07 13:12
finger.py
1.19
KB
-rw-r--r--
2022-02-07 13:12
ftp.py
101.97
KB
-rw-r--r--
2022-02-07 13:12
htb.py
9.2
KB
-rw-r--r--
2022-02-07 13:12
ident.py
7.75
KB
-rw-r--r--
2022-02-07 13:12
loopback.py
11.65
KB
-rw-r--r--
2022-02-07 13:12
memcache.py
23.1
KB
-rw-r--r--
2022-02-07 13:12
pcp.py
7.02
KB
-rw-r--r--
2022-02-07 13:12
policies.py
20.87
KB
-rw-r--r--
2022-02-07 13:12
portforward.py
2.32
KB
-rw-r--r--
2022-02-07 13:12
postfix.py
3.55
KB
-rw-r--r--
2022-02-07 13:12
shoutcast.py
3.48
KB
-rw-r--r--
2022-02-07 13:12
sip.py
37.07
KB
-rw-r--r--
2022-02-07 13:12
socks.py
7.74
KB
-rw-r--r--
2022-02-07 13:12
stateful.py
1.64
KB
-rw-r--r--
2022-02-07 13:12
tls.py
31.74
KB
-rw-r--r--
2022-02-07 13:12
wire.py
2.44
KB
-rw-r--r--
2022-02-07 13:12
Save
Rename
# Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details. """ Chop up shoutcast stream into MP3s and metadata, if available. """ from twisted import copyright from twisted.web import http class ShoutcastClient(http.HTTPClient): """ Shoutcast HTTP stream. Modes can be 'length', 'meta' and 'mp3'. See U{http://www.smackfu.com/stuff/programming/shoutcast.html} for details on the protocol. """ userAgent = "Twisted Shoutcast client " + copyright.version def __init__(self, path="/"): self.path = path self.got_metadata = False self.metaint = None self.metamode = "mp3" self.databuffer = "" def connectionMade(self): self.sendCommand("GET", self.path) self.sendHeader("User-Agent", self.userAgent) self.sendHeader("Icy-MetaData", "1") self.endHeaders() def lineReceived(self, line): # fix shoutcast crappiness if not self.firstLine and line: if len(line.split(": ", 1)) == 1: line = line.replace(":", ": ", 1) http.HTTPClient.lineReceived(self, line) def handleHeader(self, key, value): if key.lower() == "icy-metaint": self.metaint = int(value) self.got_metadata = True def handleEndHeaders(self): # Lets check if we got metadata, and set the # appropriate handleResponsePart method. if self.got_metadata: # if we have metadata, then it has to be parsed out of the data stream self.handleResponsePart = self.handleResponsePart_with_metadata else: # otherwise, all the data is MP3 data self.handleResponsePart = self.gotMP3Data def handleResponsePart_with_metadata(self, data): self.databuffer += data while self.databuffer: stop = getattr(self, "handle_%s" % self.metamode)() if stop: return def handle_length(self): self.remaining = ord(self.databuffer[0]) * 16 self.databuffer = self.databuffer[1:] self.metamode = "meta" def handle_mp3(self): if len(self.databuffer) > self.metaint: self.gotMP3Data(self.databuffer[: self.metaint]) self.databuffer = self.databuffer[self.metaint :] self.metamode = "length" else: return 1 def handle_meta(self): if len(self.databuffer) >= self.remaining: if self.remaining: data = self.databuffer[: self.remaining] self.gotMetaData(self.parseMetadata(data)) self.databuffer = self.databuffer[self.remaining :] self.metamode = "mp3" else: return 1 def parseMetadata(self, data): meta = [] for chunk in data.split(";"): chunk = chunk.strip().replace("\x00", "") if not chunk: continue key, value = chunk.split("=", 1) if value.startswith("'") and value.endswith("'"): value = value[1:-1] meta.append((key, value)) return meta def gotMetaData(self, metadata): """Called with a list of (key, value) pairs of metadata, if metadata is available on the server. Will only be called on non-empty metadata. """ raise NotImplementedError("implement in subclass") def gotMP3Data(self, data): """Called with chunk of MP3 data.""" raise NotImplementedError("implement in subclass")