Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- This program scans for srcds servers from port 27000 - 50000
- in your local network.
- A prepared broadcast is sent to the port range.
- Afterwards the script prints out ip:port of servers.
- """
- import binascii
- import socket
- import time
- import logging
- import sys
- REQUEST = "ff ff ff ff 54 53 6f 75 72 63 65 20 45 6e 67 69 6e 65 20 51 75 65 72 79 00".replace(' ', '')
- logging.basicConfig()
- logger = logging.getLogger('scanner')
- def create_socket():
- sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
- sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- return sock
- def send_broadcasts(sock, start, end):
- request = request = binascii.a2b_hex(REQUEST)
- for port in range(start, end + 1):
- sock.sendto(request, ('255.255.255.255', port))
- def receive_with_timeout(sock, timeout):
- sock.setblocking(False)
- t_start = time.time()
- while True:
- if time.time() - t_start > timeout:
- break
- try:
- response, addr = sock.recvfrom(1024)
- except BlockingIOError:
- continue
- else:
- print('{}:{}'.format(*addr))
- def main():
- logger.debug('Creating socket')
- sock = create_socket()
- logger.debug('Sending Broadcasts')
- send_broadcasts(sock, 27000, 50001)
- logger.debug('Receiving responses')
- receive_with_timeout(sock, 5)
- if __name__ == '__main__':
- if len(sys.argv) == 2 and sys.argv[1] == '-v':
- level = logging.DEBUG
- else:
- level = logging.INFO
- logger.setLevel(level)
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement