TCP 리스너를 만드는 방법?


40

소개 : 포트를 사용할 수 있는지 확인하고 특정 최대 포트 번호가 될 때까지 false 인 경우 1 씩 증가시키는 bash 기능을 만들었습니다. 예를 들어, 포트 500을 사용할 수없는 경우 550의 가용성은 550까지 점검됩니다.

목표 : 이 bash 기능을 테스트하려면 LISTEN 상태에있는 포트 범위를 만들어야합니다.

시도 : Windows에서 다음 PowerShell 명령을 사용하여 LISTEN 포트를 작성할 수 있습니다 .

PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u> $listener = [System.Net.Sockets.TcpListener]1234
PS C:\Users\u> $listener.Start();
PS C:\Users\u> netstat -nat | grep 1234
TCP    0.0.0.0:1234           0.0.0.0:0              LISTENING       InHost
PS C:\Users\u> $listener.Stop();
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u>

이를 바탕으로 CentOS에서 동일한 작업을 수행 할 수있는 명령에 대해 생각하려고했지만이 문제를 해결하는 솔루션을 찾지 못한 채 Google을 시작한 이유를 모르겠습니다.

예상 답변 : LISTEN 포트를 생성 할 수있는 명령이 포함 된 답변을 수락하고 승인합니다. 일단 명령이 실행되면 포트는 LISTEN 상태를 유지해야합니다.

[user@host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*

참고 사항 :이 모든 춤을 거치지 않고 청취 포트를 찾을 수 있습니다. Linux에서 : netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu. * BSD에서 : netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu.
lcd047

답변:


40

원하는 nc -l것을 수행하는 방법으로 사용할 수 있습니다 . 일부 구현 에는 연결을 유지할 수 nc있는 -L옵션이 있습니다.

잠시 동안 만 필요한 경우이 명령을 for루프로 열고 여러 포트를 그런 식으로 열 수 있습니다.

더 오래 열어야하는 경우 수퍼 서버 중 하나를 사용하여 데몬을 만들 수 있습니다.


1
대신 다음과 -L같이 제안합니다. -k, --keep-open청취 모드에서 다중 연결 허용
Manuel Durando

37

Netcat을 사용하여 포트 리스너를 작성할 수 있습니다.

root@ubuntu:~# nc -l 5000

netstat 명령을 사용하여 포트가 열려 있는지 여부를 확인할 수도 있습니다.

root@vm-ubuntu:~# netstat -tulpen | grep nc
tcp        0      0 0.0.0.0:5000             0.0.0.0:*               LISTEN      0          710327      17533/nc

nc로 확인할 수도 있습니다 :

Netcat 서버 리스너 :

nc -l localhost 5000

넷캣 클라이언트 :

root@vm-ubuntu:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!

포트가 열려 있지 않은 경우

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused

4
포트를 지정 -p했거나 작동하지 않았습니다.nc -l -p 1234
Leahkim

nc -l 12345는 우분투 16.04에서 일함
yuen shi

그들을 위해 /bin/nc --> nc.traditional(예를 들어 데비안), 사용 -p@Leahkim가 조언으로 위, 옵션을 선택합니다.
ankostis

6

netcat을 사용하여 들어보십시오.

# nc -l 5555

SS를 사용하여 확인

# ss -nat|grep 5555
LISTEN     0      1                         *:5555                     *:*
#

0

데비안 netcat패키지는 -p옵션을 통해 포트를 제공해야 하고 -k옵션이 작동하지 않는 다른 구현 방식을 가지고 있습니다. Docker를 사용 하여이 문제가 발생할 수 있습니다.

sudo apt install -y netcat

nc -l -p 1337

옵션이 작동 openbsd-netcat하는 위치 를 대신 사용하는 것이 좋습니다 -k.


0

파이썬 코드 아래에서 더미 포트를 여는 데 도움이됩니다.

'' '스레드를 사용한 단순 소켓 서버' ''import socket import sys HOST = ''# 기호 이름, 사용 가능한 모든 인터페이스를 의미 함 PORT = 5500 # 임의의 권한이없는 포트 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) '소켓 생성'인쇄

소켓을 로컬 호스트 및 포트에 바인딩

시도 : msg. print 'Bind failed.로 socket.error를 제외한 s.bind ((HOST, PORT)) 오류 코드 : '+ str (msg [0]) +'Message '+ msg [1] sys.exit () print'Socket bind complete '

소켓에서 듣기 시작

s.listen (10) print 'Socket now Listen'

이제 클라이언트와 계속 대화하십시오

동안 1 : # 연결 대기-통화 차단 차단, addr = s.accept () print ''+ addr [0] + ':'에 연결됨 + str (addr [1]) s.close ()

파일을 저장하고 아래와 같이 python 명령으로 실행하십시오.

~] # python portlistener.py 소켓 생성 소켓 바인드 완료 소켓 청취

그런 다음 필요한 기계에서 확인할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.