Created
April 13, 2022 06:59
-
-
Save notxesh/94e84ce6ccb9735e965e94dccae29d08 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/python3 | |
| # Raw Python3 memcache dumper | |
| # Handy for internals ;) | |
| import sys | |
| from socket import socket, AF_INET, SOCK_STREAM | |
| ip = sys.argv[1] if len(sys.argv)>1 else None | |
| port = int(sys.argv[2]) if len(sys.argv)>2 else 11211 | |
| if ip == None: | |
| print('ERROR: No IP specified') | |
| print('USAGE: python3 ' + sys.argv[0] + ' <ip> <port/11211>') | |
| sys.exit(1) | |
| def recvall(sock): | |
| BUFF_SIZE = 4096 # 4 KiB | |
| data = b'' | |
| while True: | |
| part = sock.recv(BUFF_SIZE) | |
| data += part | |
| if data[::-1][:5:][::-1] == b'END\r\n': | |
| break | |
| return data | |
| def get_item_numbers(data): | |
| items = [] | |
| data = data.decode().split('\r\n') | |
| items = list(set([x.split(':')[1] for x in data if ':' in x])) | |
| return items | |
| def get_item_keys(numbers, sock): | |
| keys = [] | |
| for i in numbers: | |
| sock.sendall(bytes(f"stats cachedump {i} 1000\n", 'utf-8')) | |
| d = recvall(s) | |
| keys.append(d.decode().split(' ')[1]) | |
| return list(set(keys)) | |
| def dump(keys, sock): | |
| for key in keys: | |
| sock.sendall(bytes(f"get {key}\n",'utf-8')) | |
| d = recvall(sock) | |
| d = d.split(b'\r\n')[1] | |
| print(key) | |
| try: | |
| print(d.decode()) | |
| except: | |
| print(d) | |
| with socket(AF_INET, SOCK_STREAM) as s: | |
| s.connect((ip, port)) | |
| # Get the items from memcahced | |
| s.sendall(b"stats items\n") | |
| d = recvall(s) | |
| # Parse the numbers out of the data dump | |
| numbers = get_item_numbers(d) | |
| keys = get_item_keys(numbers, s) | |
| dump(keys, s) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment