Sign in to follow this  
Followers 0
LithiumLi

Strings

5 posts in this topic

Hello

ok I am really bad at strings :D

#include <Constants.au3>

$Port = 80

ConsoleWrite(_CmdRead(_CmdReturn("netstat -n") , $Port))

Func _CmdRead($CmdRead , $ReadPort)
    Local $Return = "" , $String
    $String = StringSplit(StringStripCR($CmdRead), @LF)
    For $i = 1 to UBound($String) -1
        If StringInStr($String[$i], ":" & String($ReadPort)) Then
           $Return &= $String[$i] & @CRLF
        EndIf
    Next
    Return $Return 
EndFunc


Func _CmdReturn($CmdCommand)
    $CmdReturn = ""
    $Stream = Run(@ComSpec & " /c " & $CmdCommand , @SystemDir , @SW_HIDE , $STDOUT_CHILD + $STDIN_CHILD)
    While 1
        $Line = StdoutRead($Stream)
        If @error Then ExitLoop
        $CmdReturn &= $Line
    WEnd
    Return $CmdReturn
EndFunc

Example Console Return Value looks like this

TCP 127.0.0.1:4043       127.0.0.1:4044      ESTABLISHED

The information I would like returned is this

127.0.0.1:4043

so I need to strip the "tcp" and all the white spaces and 127.0.0.1:4043 but keep one I am not sure if the "local" or "foreign" address would be better to keep and also I want to remove the ESTABLISHED text but sometimes it doesn't say ESTABLISHED but it says something else such as Closed/Wait etc...

Share this post


Link to post
Share on other sites



Maybe like this:

...
        If StringInStr($String[$i], ":" & String($ReadPort)) Then
            $String[$i] = StringTrimLeft($String[$i], StringLen('  TCP    '))
            $String[$i] = StringLeft($String[$i], StringInStr($String[$i], ':')+StringLen($Port))
           $Return &= $String[$i] & @CRLF
        EndIf
...oÝ÷ Ûú®¢×+0¢¹,nëH¶§l°k)¢[y¦â¶Æz´ázåÊènW¦Â+a)ÞÈ­­ën®{-ÂßÛ0éÈ¢yrÁ©í¶¨ì"¶ayÊ+­ç-¦íjëh×6Func _CmdRead($CmdRead , $ReadPort)
    Local $Return = "" , $String
    $String = StringSplit(StringStripCR($CmdRead), @LF)
    For $i = 1 to UBound($String) -1
    If StringInStr($String[$i], ":" & String($ReadPort)) Then
        $String[$i] = StringReplace($String[$i] , "TCP" , "")
        $String[$i] = StringStripWS($String[$i] , 1) ;3
        ;ClipPut($String[$i]) 
        $Split = StringInStr($String[$i] , ":")
        $String[$i] = StringTrimLeft($String[$i] , $Split + StringLen($Port))
        $String[$i] = StringStripWS($String[$i] , 1)
        $String[$i] = StringLeft($String[$i] , $Split + StringLen($Port))
        ;;;;;
        
        ;;;;;
        $Return &= $String[$i] & @CRLF
    EndIf
    Next
        Return $Return 
EndFunc

Share this post


Link to post
Share on other sites

Well, it's depended on the exact match that you need.

I mean, for this:

TCP 127.0.0.1:4043 127.0.0.1:4044 ESTABLISHED

or this:

TCP 127.0.0.1:4043 127.0.0.1:4044 ESTABLISHED

And what about this:

TCP 127.0.0.1:4044 127.0.0.1:4043 ESTABLISHED

or this:

TCP 127.0.0.1:4044 127.0.0.1:4043 ESTABLISHED

Check this one, tell me what you think:

#include <Constants.au3>

$Port = 80

ConsoleWrite(_CmdRead(_CmdReturn("netstat -n") , $Port))

Func _CmdRead($CmdRead , $ReadPort)
    Local $Return = "" , $String
    Local $sPattern = "\b(?>(?:\d|[01]?\d\d|25[0-5]|2[0-4]\d)\.){3}(?:\d|[01]?\d\d|25[0-5]|2[0-4]\d):\Q" & $Port & '\E\b'
    $String = StringSplit(StringStripCR($CmdRead), @LF)
    For $i = 1 to UBound($String) -1
        If StringInStr($String[$i], ":" & String($ReadPort)) Then
            Local $aTmp = StringRegExp($CmdRead, $sPattern, 1)
            If IsArray($aTmp) Then ConsoleWrite($aTmp[0] & @LF)
           $Return &= $String[$i] & @CRLF
        EndIf
    Next
    Return $Return
EndFunc


Func _CmdReturn($CmdCommand)
    $CmdReturn = ""
    $Stream = Run(@ComSpec & " /c " & $CmdCommand , @SystemDir , @SW_HIDE , $STDOUT_CHILD + $STDIN_CHILD)
    While 1
        $Line = StdoutRead($Stream)
        If @error Then ExitLoop
        $CmdReturn &= $Line
    WEnd
    Return $CmdReturn
EndFunc

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

Well, it's depended on the exact match that you need.

I mean, for this:

TCP 127.0.0.1:4043 127.0.0.1:4044 ESTABLISHED

or this:

TCP 127.0.0.1:4043 127.0.0.1:4044 ESTABLISHED

And what about this:

TCP 127.0.0.1:4044 127.0.0.1:4043 ESTABLISHED

or this:

TCP 127.0.0.1:4044 127.0.0.1:4043 ESTABLISHED

Check this one, tell me what you think:

#include <Constants.au3>

$Port = 80

ConsoleWrite(_CmdRead(_CmdReturn("netstat -n") , $Port))

Func _CmdRead($CmdRead , $ReadPort)
    Local $Return = "" , $String
    Local $sPattern = "\b(?>(?:\d|[01]?\d\d|25[0-5]|2[0-4]\d)\.){3}(?:\d|[01]?\d\d|25[0-5]|2[0-4]\d):\Q" & $Port & '\E\b'
    $String = StringSplit(StringStripCR($CmdRead), @LF)
    For $i = 1 to UBound($String) -1
        If StringInStr($String[$i], ":" & String($ReadPort)) Then
            Local $aTmp = StringRegExp($CmdRead, $sPattern, 1)
            If IsArray($aTmp) Then ConsoleWrite($aTmp[0] & @LF)
           $Return &= $String[$i] & @CRLF
        EndIf
    Next
    Return $Return
EndFunc


Func _CmdReturn($CmdCommand)
    $CmdReturn = ""
    $Stream = Run(@ComSpec & " /c " & $CmdCommand , @SystemDir , @SW_HIDE , $STDOUT_CHILD + $STDIN_CHILD)
    While 1
        $Line = StdoutRead($Stream)
        If @error Then ExitLoop
        $CmdReturn &= $Line
    WEnd
    Return $CmdReturn
EndFunc
Thats very good but I just learned something new today, did you know you can do this.

netstat -n | find "80"
:D

This is a lot faster and doesn't require a lot of strings and makes return much faster in a loop.

Edited by LithiumLi

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0