Skip to content

jr-boney/Email_scanner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Email Harvester Integration

Step 1: Install theHarvester

First, I installed theHarvester and its dependencies. I made sure I had Python and pip installed, and then ran:

git clone https://github.com/laramies/theHarvester.git
cd theHarvester
pip install -r requirements.txt

Step 2: Set Up the MERN Stack Application

I created a MERN stack application, which includes an Express backend and a React frontend. If you're starting from scratch, set up the project with the following structure.

Step 3: Create a Scanning Endpoint in the Backend

In my Express backend, I created an endpoint to execute theHarvester commands. Here's how I set it up:

  1. Set Up Express Server:

    I ensured my Express server was running and then created a new route to handle the harvesting.

  2. Create the Scan Route:

    Here’s the code I used to execute theHarvester:

    const express = require('express');
    const { exec } = require('child_process');
    const cors = require('cors');
    const bodyParser = require('body-parser');
    
    const app = express();
    app.use(cors());
    app.use(bodyParser.json());
    
    app.post('/harvest', (req, res) => {
      const { domain } = req.body;
    
      // Sanitize the input to prevent command injection
      const sanitizedDomain = domain.replace(/[^a-zA-Z0-9.-]/g, '');
    
      // Execute theHarvester command
      exec(`python3 /path/to/theHarvester/theHarvester.py -d ${sanitizedDomain} -b all`, (error, stdout, stderr) => {
        if (error) {
          console.error(`Error: ${stderr}`);
          return res.status(500).json({ error: stderr });
        }
        res.json({ results: stdout });
      });
    });
    
    app.listen(5000, () => {
      console.log('Server running on http://localhost:5000');
    });

    (Make sure to replace /path/to/theHarvester/theHarvester.py with the actual path to theHarvester on your system.)

Step 4: Develop the Frontend

For the frontend, I created a simple form in React to allow users to input a domain and trigger the harvesting process.

import React, { useState } from 'react';
import axios from 'axios';

const App = () => {
  const [domain, setDomain] = useState('');
  const [results, setResults] = useState('');

  const handleHarvest = async () => {
    try {
      const response = await axios.post('http://localhost:5000/harvest', { domain });
      setResults(response.data.results);
    } catch (error) {
      setResults('Error: ' + error.message);
    }
  };

  return (
    <div>
      <h1>Email Harvester</h1>
      <input
        type="text"
        value={domain}
        onChange={(e) => setDomain(e.target.value)}
        placeholder="Enter domain to scan"
      />
      <button onClick={handleHarvest}>Harvest Emails</button>
      <pre>{results}</pre>
    </div>
  );
};

export default App;

Step 5: Test the Application

To test the application, I started the Express server:

node index.js

Then, I ran the React app in a separate terminal:

cd client
npm start

Finally, I entered a domain in the form and clicked "Harvest Emails" to see the results.

Step 6: Security Considerations

  • Input Validation: It’s crucial to sanitize inputs to prevent command injection attacks.
  • Permission: Always ensure that I have permission to scan the domain.
  • Error Handling: Implementing robust error handling helps manage any issues that arise from executing theHarvester.

Additional Features

In the future, I plan to add:

  • User Authentication: To track who is using the tool.
  • Save Results: To store results in a database for later review.
  • Custom Options: Allowing users to customize the search options for theHarvester.

with node.js

TheHarvester can be integrated with Node.js quite effectively. Here’s how compatible it is and how you can set it up:

Compatibility

  • Executing Commands: You can run TheHarvester as a subprocess using Node.js, which allows you to execute command-line tools easily.
  • Asynchronous Operations: Node.js's non-blocking nature is beneficial when executing long-running commands like TheHarvester.
  • Output Handling: You can capture and process the output from TheHarvester directly in your Node.js application.

Basic Setup Guide

  1. Install TheHarvester: Make sure TheHarvester is installed on your system and accessible via the command line.

  2. Set Up a Node.js Project:

    mkdir harvester-app
    cd harvester-app
    npm init -y
    npm install express
  3. Create a Simple Express App: Here's an example of how to set up a basic Node.js app that integrates TheHarvester:

    const express = require('express');
    const { exec } = require('child_process');
    
    const app = express();
    const PORT = 3000;
    
    app.use(express.json());
    app.use(express.urlencoded({ extended: true }));
    
    app.post('/harvest', (req, res) => {
        const domain = req.body.domain;
    
        if (!domain) {
            return res.status(400).send('Domain is required');
        }
    
        exec(`theharvester -d ${domain} -l 500 -b all`, (error, stdout, stderr) => {
            if (error) {
                console.error(`exec error: ${error}`);
                return res.status(500).send('Error executing TheHarvester');
            }
    
            res.send(stdout);
        });
    });
    
    app.listen(PORT, () => {
        console.log(`Server is running on http://localhost:${PORT}`);
    });
  4. Run Your App: Start your server by running:

    node app.js
  5. Test the API: You can use a tool like Postman or cURL to send a POST request to your endpoint:

    curl -X POST http://localhost:3000/harvest -H "Content-Type: application/json" -d '{"domain": "example.com"}'

Considerations

  • Error Handling: Make sure to add proper error handling for different scenarios, such as invalid domains or execution errors.
  • Security: Be cautious about command injection vulnerabilities. Validate and sanitize inputs to prevent malicious usage.
  • Rate Limits: Respect the rate limits of the services you are querying to avoid being blocked.

Overall, integrating TheHarvester with Node.js is straightforward, and using Express makes it easy to set up a web interface for your application.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published