Jump to content

Verificar se Porta TCP/IP está a ser usada ou nao?


Johnny Mercy
 Share

Recommended Posts

Boas! Eu estou a desenvolver um programa que permite visualizar as portas que estão a ser usadas..

O meu problema é ver se determinada porta se encontra disponivel ou ja está em uso.

por exemplo:

if PortaEstaEmUso(80) then

end if

Alguem me pode dar umas luzes?  🙂

Link to comment
Share on other sites

Nenhum desses links diz como verificar se a porta esta a ser usada ou não directamente, eu não quero aceitar conexões nem nada do género, só quero saber se a porta está a ser usada ou não...

Exemplo em php:

$fp = @fsockopen($Server_IP, $Game_Login, $errno, $errstr, 1);

Obrigado na mesma! 🙂

Link to comment
Share on other sites

Para clarificar: @Johnny Mercy: há portas locais e remotas. Os links do bioshock permitem verificar se as portas locais (do PC onde o teu programa corre) estão a ser usadas, o do anolsi permite verificar se as portas de um PC remoto aceitam ligações.

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

IceBrain. Estás a falar em qual dos 3 links que ele colocou?

Não encontrei nada em que me mostra-se se a porta estava a ser usada ou nao.

A forma de verificar se uma porta local está a ser usada é tentar abri-la e ver se dá erro (Excepção, no caso de .NET). Se der, é porque está a ser usada. Não esquecer fechá-la de seguida caso não dê erro.

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Eu ja tentei fazer isso mas não consegui.

        winsock.RemoteHost = "127.0.0.1"
        winsock.RemotePort = "80"
        winsock.Listen()
        If Err.Number = 10048 Then
            MsgBox("a")
        End If

Dentro de um Try também não funcionou :S

Link to comment
Share on other sites

Experimenta com o TCPListener

Escrevi o código de cabeça e é natural que dê algum erro, mas não deve estar longe.

    Private Function PortLivre(ByVal Port As Integer) As Boolean

        Dim IPEP As new Net.IPEndPoint(Net.IPAddress.Parse("127.0.0.1"), Port)
        Dim TCPL as new Net.Sockets.TcpListener(IPEP)
        Try
            TCPL.Start()
            TCPL.Stop()
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Ribeiro eu usei esse código só que o valor devolvido é sempre True.

hmm..

Eu já tentei usar a OCX do windows (Winsock Control). Mas dá me erro.. Quando coloco esse controlo no form e compilo dá-me o seguinte erro:

Ocorreu um erro ao criar o formulário. Consulte a Exception.InnerException para obter detalhes. O erro é: Classe não registada (Excepção de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

Link to comment
Share on other sites

O erro acontece quando tão tens o OCX registado, no system32 ou junto do executável.

De qualquer maneira, esquece a WinSock.

Se te devolve sempre True é porque a porta(LOCAL) está aberta e não tem nada "montado".

Afinal o que pretendes ao certo?

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Devia esbarrar com o apache, sim.

Experimenta então sem o IPEndPoint, e vê se não dispara uma exception:

        Dim IPA As Net.IPAddress = Net.IPAddress.Parse("127.0.0.1")
        Dim TCPL As New Net.Sockets.TcpListener(IPA, 80)
        TCPL.Start()

Alternativamente faz ao contrário.

Tenta um "handshake" com o localhost e a porta pretendida:

Se voltar True significa que está alguma coisa a escutar na porta.

    Private Function PortResponde(ByVal Port As Integer) As Boolean

        Dim IPEP As New Net.IPEndPoint(Net.IPAddress.Parse("127.0.0.1"), Port)
        Dim TCPC As New Net.Sockets.TcpClient

        Try
            TCPC.Connect(IPEP)
            TCPC.Close()
            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Usa o connect assíncrono.

BeginConnect, acho.

Preparas uma sub para o callback deixas o gajo a trabalhar por baixo.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Desculpa mas eu nunca usei um BackgroundWorker.. Por isso nao sei se é assim que se tem de fazer. O que eu fiz foi:

Importei o BackgroundWorker para o Form. Carreguei 2 vezes por cima dele e ele abriu me um evento do backgroundworker chamado "BackgroundWorker1_DoWork" e depois criei uma Sub chamada "StatusCheck()" onde tem o "PortResponde()". Depois disto fui ao Timer e coloquei backgroundworker1.RunWorkerAsync() mas deu me erro..

"A operação entre threads não é válida: controlo 'lbLoginServer' acedido a partir de um thread diferente do thread onde foi criado."

Desculpa mais uma vez 🙂

Link to comment
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
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.