#!/usr/bin/python3
import socket
import argparse
from time import sleep
import random


def check_my_ip():
    try:
        test_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        test_socket.connect(("1.1.1.1", 80))
        my_ip = test_socket.getsockname()[0]
        test_socket.close()
        return my_ip
    except:
        return None


def dns_lookup(target):
    try:
        socket.gethostbyname(target)
    except:
        pass


def start_smoke(names, extensions, qpm):
    print("started DnSmoke")
    delay = 60 / qpm
    while True:
        target = f"{random.choice(names)}.{random.choice(extensions)}"
        dns_lookup(target)
        sleep(delay)


def get_options():
    parser = argparse.ArgumentParser(
        description="DnSmoke: A tool to generate random DNS noise.",
        usage="python3 dnsmoke.py [options]",
    )
    parser.add_argument("-q", "--freq", type=int, help="Queries per minute", default=6)
    parser.add_argument("-f", "--file", type=str, help="Path to custom domain file")
    parser.add_argument("-n", "--ifnot", type=str, help="IP address to avoid")

    return parser.parse_args()


NAMES = [
    "amazon",
    "blockchain",
    "bitcoin",
    "com",
    "cloud",
    "btc",
    "mail",
    "crypto",
    "google",
    "yahoo",
    "data",
    "app",
    "home",
    "online",
    "one",
    "prime",
    "microsoft",
    "aws",
    "digital",
    "shopify",
    "news",
    "oculusrift",
    "oculus",
    "bit",
    "seo",
    "get",
    "cbd",
    "shop",
    "cam4",
    "bmw",
    "business",
    "iot",
    "casino",
    "net",
    "global",
    "code",
    "internet",
    "tumblr",
    "email",
    "info",
    "kindle",
    "coin",
    "apple",
    "smart",
    "best",
    "link",
    "drone",
    "startup",
    "easy",
    "yoga",
    "design",
    "365",
    "fonbet",
    "sms",
    "matt",
    "open",
    "hello",
    "hotel",
    "ethereum",
    "industry",
    "life",
    "tech",
    "pay",
    "virtual",
    "blog",
    "techno",
    "esports",
    "health",
    "vip",
    "nova",
    "music",
    "insurance",
    "edu",
    "domain",
    "alpha",
    "quantum",
    "space",
    "dns",
    "container",
    "cyber",
    "car",
    "sky",
    "arrow",
    "top",
    "alex",
    "auto",
    "water",
    "cryptocurrency",
    "video",
    "live",
    "linux",
    "future",
    "org",
    "good",
    "fun",
    "elite",
    "air",
    "max",
    "apps",
    "atlas",
    "star",
    "ada",
    "store",
    "vpn",
    "free",
    "ikoula",
    "sam",
    "energy",
    "job",
    "mesh",
    "game",
    "gov",
    "sport",
    "hyper",
    "eos",
    "gold",
    "book",
    "super",
    "buy",
    "yes",
    "nano",
    "marketing",
    "start",
    "security",
    "jobs",
    "mobile",
    "radio",
    "sun",
    "play",
    "happy",
    "green",
    "epic",
    "creative",
    "apex",
    "panda",
    "hosting",
    "image",
    "food",
    "time",
    "solar",
    "mega",
    "wave",
    "robot",
    "portal",
    "host",
    "share",
    "brand",
    "focus",
    "poker",
    "local",
    "flow",
    "dream",
    "world",
    "core",
    "next",
    "token",
    "ads",
    "new",
    "big",
    "lab",
    "law",
    "media",
    "baidu",
    "map",
    "chat",
    "zoom",
    "simple",
    "twitter",
    "click",
    "entrepreneur",
    "innovation",
    "hotels",
    "money",
    "you",
    "all",
    "bio",
    "service",
    "fast",
    "love",
    "books",
    "market",
    "photo",
    "hub",
    "bank",
    "wordpress",
    "pixel",
    "search",
    "box",
    "weed",
    "dot",
    "fashion",
    "social",
    "inbox",
    "iam",
    "work",
    "travel",
    "master",
    "site",
    "invest",
    "mac",
    "cars",
    "server",
    "zen",
    "dubai",
    "metro",
    "build",
    "house",
    "youtube",
    "nexus",
    "sports",
    "finance",
    "support",
    "spark",
    "delta",
    "fox",
    "city",
    "test",
    "arc",
    "fly",
    "geo",
    "find",
    "fire",
    "visa",
    "forum",
    "domains",
    "people",
    "we",
    "gps",
    "safe",
    "instagram",
    "fit",
    "help",
    "planet",
    "unicorn",
    "bot",
    "crm",
    "freedom",
    "echo",
    "total",
    "change",
    "team",
    "website",
    "agile",
    "better",
    "now",
    "meta",
    "matrix",
    "games",
    "network",
    "demo",
    "king",
    "block",
    "for",
    "its",
    "zero",
    "voice",
    "b2b",
    "real",
    "diamond",
    "premium",
    "clear",
    "algo",
    "mars",
    "cdn",
    "leo",
    "mini",
    "coffee",
    "event",
    "wolf",
    "beauty",
    "school",
    "chain",
    "ali",
    "forex",
    "secure",
    "jet",
    "wifi",
    "med",
    "wood",
    "angel",
    "aurora",
    "ace",
    "sos",
    "pizza",
    "podcast",
    "brain",
    "devops",
    "care",
    "royal",
    "nomad",
    "tom",
    "edge",
    "omni",
    "project",
    "fintech",
    "david",
    "great",
    "reiwa",
    "go",
    "expo",
    "awesome",
    "index",
    "unique",
    "stream",
    "doc",
    "ice",
    "tea",
    "mark",
    "vegan",
    "rolex",
    "eth",
    "wine",
    "bet",
    "dna",
    "plus",
    "your",
    "bridge",
    "webdesign",
    "first",
    "baby",
    "dragon",
    "access",
    "privacy",
    "titan",
    "e-mail",
    "weather",
    "idc",
    "genius",
    "aura",
    "smarthome",
    "lighthouse",
    "act",
    "ask",
    "ai",
    "icon",
    "make",
    "shopping",
    "fresh",
    "luxury",
    "led",
    "pro",
    "tag",
    "cash",
    "more",
    "human",
    "events",
    "wow",
    "studio",
    "moon",
    "family",
    "insta",
    "toyota",
    "rocket",
    "key",
    "vps",
    "film",
    "legacy",
    "beyond",
    "legal",
    "ip",
    "lux",
    "boom",
    "goto",
    "gmail",
    "apollo",
    "arts",
    "kids",
    "list",
    "learn",
    "credit",
    "420",
    "remote",
    "thomas",
    "dan",
    "win",
    "taxi",
    "wise",
    "redbull",
    "office",
    "hive",
    "xyz",
    "boss",
    "pure",
    "bloom",
    "orion",
    "galaxy",
    "mix",
    "drive",
    "story",
    "cat",
    "inter",
    "doctor",
    "developer",
    "exness",
    "bbs",
    "root",
    "ocean",
    "proxy",
    "system",
    "pet",
    "rise",
    "coaching",
    "ultra",
    "terra",
    "pos",
    "beta",
    "cafe",
    "wiki",
    "man",
    "usa",
    "geek",
    "daniel",
    "light",
    "gaming",
    "cnc",
    "erp",
    "etc",
    "tudor",
    "aqua",
    "flex",
    "rock",
    "soft",
    "true",
    "party",
    "orange",
    "hacker",
    "earth",
    "micro",
    "shift",
    "speed",
    "bim",
    "sim",
    "neon",
    "talk",
    "capital",
    "culture",
    "crystal",
    "create",
    "mi",
    "and",
    "face",
    "move",
    "akasha",
    "union",
    "mia",
    "iptv",
    "lead",
    "mint",
    "park",
    "up",
    "git",
    "tax",
    "tim",
    "base",
    "cool",
    "plan",
    "booking",
    "lawyer",
    "vr",
    "mind",
    "craft",
    "coach",
    "sec",
    "mike",
    "quality",
    "quick",
    "content",
    "skynet",
    "ok",
    "hot",
    "tap",
    "url",
    "trip",
    "pulse",
    "tec",
    "dash",
    "clean",
    "freelance",
    "jesus",
    "nature",
    "alphabet",
    "honey",
    "artificialintelligence",
    "acc",
    "axis",
    "call",
    "central",
    "i",
    "karma",
    "ama",
    "astro",
    "wallet",
    "currency",
    "beer",
    "deep",
    "holo",
    "discover",
    "cpa",
    "gem",
    "set",
    "club",
    "like",
    "math",
    "spot",
    "text",
    "voip",
    "stock",
    "login",
    "evolution",
    "dog",
    "bike",
    "africa",
    "black",
    "organic",
    "php",
    "case",
    "sale",
    "seed",
    "tudorwatch",
    "land",
    "esport",
    "tribe",
    "private",
    "atom",
    "blue",
    "mall",
    "ilove",
    "caravan",
    "pop",
    "ebay",
    "python",
    "analytics",
    "bright",
    "phone",
    "thescore",
    "id",
    "mag",
    "golf",
    "vape",
    "campus",
    "perfect",
    "adventure",
    "aim",
    "alt",
    "ccs",
    "img",
    "nice",
    "pool",
    "tree",
    "exchange",
    "james",
    "simon",
    "chris",
    "smith",
    "instant",
    "turbo",
    "stellar",
    "ark",
    "css",
    "dom",
    "omg",
    "rose",
    "contact",
    "weber",
    "women",
    "smartcity",
    "our",
    "ssl",
    "audi",
    "node",
    "tiny",
    "services",
    "elevate",
    "bnb",
    "bus",
    "run",
    "spa",
    "foto",
    "snow",
    "wedding",
    "coins",
    "public",
    "ticket",
    "co",
    "ben",
    "joy",
    "via",
    "john",
    "nike",
    "saas",
    "spring",
    "ripple",
    "community",
    "point",
    "corona",
    "linkedin",
    "steam",
    "my",
    "ats",
    "cube",
    "scout",
    "webhosting",
    "power",
    "sakura",
    "ovh",
    "join",
    "cinema",
    "tiger",
    "silver",
    "track",
    "platform",
    "eat",
    "uae",
    "xrp",
    "sell",
    "dating",
    "watch",
    "clever",
    "bingo",
    "today",
    "save",
    "white",
    "martin",
    "luna",
    "robo",
    "view",
    "review",
    "solid",
    "group",
    "chinese",
    "action",
    "bible",
    "ether",
    "together",
    "tv",
    "deal",
    "fair",
    "post",
    "wild",
    "radar",
    "concept",
    "flowers",
    "frank",
    "ims",
    "grid",
    "pass",
    "pepe",
    "this",
    "boost",
    "chess",
    "chanel",
    "rad",
    "card",
    "london",
    "quest",
    "laser",
    "fund",
    "look",
    "mama",
    "spin",
    "freelancer",
    "schneider",
    "direct",
    "eagle",
    "tango",
    "stone",
    "airbnb",
    "android",
    "emiratesnbd",
    "lex",
    "fish",
    "maya",
    "computer",
    "movie",
    "peace",
    "garage",
    "sunrise",
    "onion",
    "technology",
    "alibaba",
    "price",
    "bob",
    "gas",
    "gift",
    "paul",
    "tour",
    "express",
    "training",
    "coworking",
    "levelup",
    "america",
    "csc",
    "gig",
    "seven",
    "jack",
    "send",
    "vine",
    "wind",
    "simply",
    "outdoor",
    "secret",
    "evo",
    "page",
    "berlin",
    "sushi",
    "color",
    "falcon",
    "garden",
    "commerce",
    "traffic",
    "avalon",
    "diy",
    "moe",
    "pic",
    "halo",
    "push",
    "arena",
    "felix",
    "stars",
    "restaurant",
    "check",
    "bar",
    "eva",
    "hey",
    "lit",
    "mas",
    "gaia",
    "loli",
    "show",
    "whisky",
    "polaris",
    "walmart",
    "minecraft",
    "binance",
    "bbc",
    "fix",
    "flo",
    "byte",
    "automation",
    "partner",
    "anime",
    "forest",
    "status",
    "sweet",
    "ceo",
    "men",
    "bali",
    "kiss",
    "sage",
    "thai",
    "academy",
    "healthy",
    "source",
    "korbit",
    "magic",
    "cap",
    "tru",
    "acme",
    "flip",
    "meet",
    "michael",
    "trading",
    "survey",
    "pharmacy",
    "be",
    "abs",
    "cms",
    "fan",
    "see",
    "sip",
    "maps",
    "rich",
    "europa",
    "lotto",
    "signal",
    "trend",
    "carbon",
    "select",
    "villa",
    "tiktok",
    "imc",
    "lol",
    "audio",
    "motor",
    "crowd",
    "movies",
    "investment",
    "bliss",
    "insure",
    "climate",
    "bts",
    "inc",
    "ips",
    "scan",
    "sign",
    "dynamic",
    "class",
    "agent",
    "ghost",
    "level",
    "reach",
    "inside",
    "datascience",
    "arch",
    "lean",
    "lucky",
    "links",
    "think",
    "wonder",
    "icloud",
    "catalyst",
    "skyline",
    "mr",
    "hit",
    "wish",
    "enterprise",
    "gateway",
    "tattoo",
    "dr",
    "msn",
    "bits",
    "drop",
    "lego",
    "yolo",
    "paypal",
    "utopia",
    "chaos",
    "octopus",
    "coding",
    "kairos",
    "logos",
    "motion",
    "asa",
    "bms",
    "fab",
    "mode",
    "mojo",
    "information",
    "vital",
    "dollar",
    "react",
    "on",
    "bud",
    "ops",
    "dapp",
    "personal",
    "asset",
    "webmaster",
    "portfolio",
    "slots",
    "universe",
    "church",
    "vector",
    "add",
    "ant",
    "bird",
    "nick",
    "globe",
    "leader",
    "lemon",
    "maker",
    "growth",
    "hi",
    "hash",
    "ring",
    "room",
    "tool",
    "blogspot",
    "forward",
    "hrs",
    "jam",
    "mod",
    "anna",
    "form",
    "jump",
    "meme",
    "ryan",
    "will",
    "backup",
    "bamboo",
    "mailchimp",
    "mms",
    "sme",
    "stc",
    "zip",
    "area",
    "file",
    "nerd",
    "word",
    "pearl",
    "christian",
    "crown",
    "eshop",
    "police",
    "happiness",
    "day",
    "mfc",
    "oil",
]


TLDS = ["com", "net", "org", "co", "me", "info", "us", "de", "jp", "in", "com"]

def main():
    options = get_options()

    if options.ifnot and check_my_ip() == options.ifnot:
        exit(0)

    if options.file:
        try:
            with open(options.file, "r") as f:
                source_list = [line.strip() for line in f if line.strip()]
            start_smoke(source_list, [""], options.freq)
        except:
            exit(1)
    else:
        start_smoke(NAMES, TLDS, options.freq)


if __name__ == "__main__":
    main()
