76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
import subprocess
|
|
from typing import Dict
|
|
import requests
|
|
import tempfile
|
|
import zipfile
|
|
import io
|
|
import os
|
|
from langchain_openai import ChatOpenAI
|
|
from langchain_core.runnables import RunnablePassthrough
|
|
from langchain_core.prompts import PromptTemplate
|
|
from langchain_core.output_parsers import StrOutputParser
|
|
from langchain.agents import AgentExecutor, create_react_agent, load_tools
|
|
from langchain_core.pydantic_v1 import BaseModel, Field, root_validator
|
|
from langchain.tools import tool
|
|
from tools import (
|
|
get_wireless_interface,
|
|
change_adapter_mode,
|
|
wifi_encryption_cracking,
|
|
packet_capture_reconnaissance,
|
|
wifi_encryption_cracking,
|
|
packet_frame_transmission,
|
|
)
|
|
|
|
from langchain import hub
|
|
from langchain_community.tools import ShellTool
|
|
|
|
|
|
from dotenv import load_dotenv
|
|
from time import time
|
|
|
|
load_dotenv()
|
|
shell_tool = ShellTool()
|
|
|
|
llm = ChatOpenAI(model_name="gpt-4o", temperature=0)
|
|
tools = []
|
|
tools.extend(
|
|
[
|
|
get_wireless_interface,
|
|
change_adapter_mode,
|
|
wifi_encryption_cracking,
|
|
packet_capture_reconnaissance,
|
|
wifi_encryption_cracking,
|
|
packet_frame_transmission,
|
|
]
|
|
)
|
|
base_prompt = hub.pull("langchain-ai/react-agent-template")
|
|
prompt = base_prompt.partial(
|
|
instructions="""
|
|
You are a wireless network penetration testing assistant
|
|
Answer the user's request by utilizing the available tools including iwconfig, airmon-ng, airodump-ng and aircrack-ng.
|
|
As necessary, combine the use of various tools to fufill the request
|
|
If a tool is not availble to answer the users request, reject the request and provide the reason.
|
|
|
|
"""
|
|
)
|
|
agent = create_react_agent(llm, tools, prompt)
|
|
agent_executor = AgentExecutor(
|
|
agent=agent, tools=tools, verbose=True, handle_parsing_errors=True
|
|
)
|
|
|
|
|
|
print(
|
|
"Welcome to the Wi-Fi reconnissance AI assistant. I can perform wifi recon and penetration tasks from the radio on your local machine."
|
|
)
|
|
print(f"I am configured with these tools")
|
|
for tool in tools:
|
|
print(f" Tool: {tool.name} = {tool.description}")
|
|
|
|
while True:
|
|
line = input("llm>> ")
|
|
if line:
|
|
result: Dict[str, any] = agent_executor.invoke({"input": line})
|
|
print(result["output"])
|
|
else:
|
|
break
|