Anzeige:
Ergebnis 1 bis 4 von 4

Thema: bash - port scanner mit telnet

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.08.2002
    Beiträge
    23

    Unhappy bash - port scanner mit telnet

    Hi,

    ich versuche gerade zum Spass einen Portscanner mit der Bash und Telnet zu basteln.
    Das eigentliche Problem ist nur hier:

    PHP-Code:
    # save target reply in SCAN
    SCAN=`echo ${MSG} | telnet ${TARGET} ${SPORT} 1>/dev/null
    Von stderr(2), kommt bei einem offenen Port die Meldung "Connection closed by foreign host.". Leider werden aber nur Ausgaben von stdout in der Variablen $SCAN gespeichert. Wie kann ich die Ausgabe von stderr in der Variablen $SCAN speichern?


    PHP-Code:
    #!/bin/sh

    # target host
    TARGET=${1}
    # start port
    SPORT=${2}
    # end port
    EPORT=${3}

    # send message to host
    MSG="this is not a scan ;-)"
    # target reply: port open message
    TREP="Connection closed by foreign host."

    while [ ! ${SPORT} -eq ${EPORT} ]; do
            
    # save target reply in SCAN
            
    SCAN=`echo ${MSG} | telnet ${TARGET} ${SPORT} 1>/dev/null`

            
    # compare SCAN with TREP
            
    if [ "${SCAN}== "${TREP}]; then
                    
    echo "${SPORT} is open, on ${TARGET}!";
            else
                    echo 
    "${SPORT} is closed, on ${TARGET}!";
            
    fi

            
    # increment port
            
    SPORT=`expr ${SPORT} + 1`
    done
    gruss

    Jochen

  2. #2
    Registrierter Benutzer Avatar von phate
    Registriert seit
    14.02.2003
    Beiträge
    149
    Hi lobo,

    Wie kann ich die Ausgabe von stderr in der Variablen $SCAN speichern?
    indem Du stderr mit auf stdout umleitest.

    SCAN=`echo ${MSG} | telnet ${TARGET} ${SPORT} 2>&1 1>/dev/null`

    Somit landen nun auch die Ausgaben auf stderr in stdout und somit in $SCAN.

    gruss,

    phate

  3. #3
    Registrierter Benutzer
    Registriert seit
    13.08.2002
    Beiträge
    23
    Vielen Dank!!!

    Ich habe auch alles mögliche Ausprobiert, aber an das hatte ich nicht gedacht. Ich hatte schon so etwas probiert, nur hatte ich bei 2>&1, das & Zeichen vergessen.

    Zwischenzeitlich hatte ich schon was funktionierendes, aber mit awk und das war recht langsam, aber jetzt funktionierts ja ;-)

    PHP-Code:
    #!/bin/sh

    # host to scan
    TARGET=${1}
    # start port
    SPORT=${2}
    # end port
    EPORT=`echo $[${3}+1]`
    # send message to host
    MSG="This is not a scan ;-)"
    # port open message
    POMSG="Connection closed by foreign host."

    # help message
    usage() {
            echo
            echo 
    "          usage: ${0} <TARGET> <START-PORT> <END-PORT>"
            
    echo

            exit 
    1
    }

    # check arguments
    if [ "$#" -ne 3 ]; then
            usage
    fi

    echo
    echo 
    "Scanning host: ${TARGET}"
    echo

    while [ ! ${
    SPORT} -eq ${EPORT} ]; do
            
    # scan port. save result in $SCAN
            
    SCAN=`echo "${MSG}" | telnet ${TARGET} ${SPORT} 2>&1 1>/dev/null`
            if [ 
    "${SCAN}== "${POMSG}]; then
                    
    echo "${SPORT} is open!"
            
    fi
            
    # increment $SPORT
            
    SPORT=`echo $[${SPORT}+1]`
    done

    echo 
    Gruss

    Jochen

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    Hmm, gibt telnet keinen exit Status zurück?
    Probier mal, was passiert wenn du telnet host; echo $? machst ob sich die Ausgabe der Shell (ne Zahl einfach) unterschieden wenn es den Host gibt und du telnet beendest und wenn es den Host nicht gibt. Nur so ne Idee, ist dann auch auf internationale Ausgaben kompatibel. Nur so ne Idee...
    chmod -R +t /*

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •