Linux에서 포트가 열려 있는지 효율적으로 테스트합니까?
bash 스크립트에서 포트 여부를 신속하게 확인하는 방법은 무엇입니까?445
서버에서 열려 있거나 열려 있습니다.
몇 가지 옵션을 시도해 보았지만 빠른 방법이 필요합니다.
1. lsof -i :445
(초 단위 소요)
2. netstat -an |grep 445 |grep LISTEN
(초 단위 소요)
3. telnet
(돌아오지 않습니다)
4. nmap
,netcat
서버에서 사용할 수 없습니다.
먼저 열거하지 않고 그 다음에 후회하는 방법을 알면 좋을 것입니다.
최근에 알게 된 놀라운 사실은 Bash가 기본적으로 파일 설명자로 tcp 연결을 지원한다는 것입니다.사용 방법:
exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6
0,1,2가 stdin,stdout,stderr이기 때문에 6을 파일 설명자로 사용하고 있습니다. 5는 Bash에서 하위 프로세스에 사용하는 경우가 있으므로 3,4,6,7,8,9는 안전해야 합니다.
아래 설명에 따라 스크립트에서 로컬 서버에서 수신을 테스트하려면:
exec 6<>/dev/tcp/127.0.0.1/445 || echo "No one is listening!"
exec 6>&- # close output connection
exec 6<&- # close input connection
다른 사용자가 듣고 있는지 확인하려면 루프백으로 연결을 시도합니다.실패하면 포트가 닫히거나 액세스가 허용되지 않습니다.그런 다음 연결을 닫습니다.
전자 메일 보내기, 실패 시 스크립트 종료 또는 필요한 서비스 시작과 같은 사용 사례에 맞게 이를 수정합니다.
여기 "빠른 대답"과 함께 매우 짧은 것이 있습니다: 원격 TCP 포트가 Shell 스크립트에서 열렸는지 테스트하는 방법은 무엇입니까?
nc -z <host> <port>; echo $?
127.0.0.1과 함께 "원격" 주소로 사용합니다.
포트가 열려 있으면 "0"을 반환하고 포트가 닫혀 있으면 "1"을 반환합니다.
예.
nc -z 127.0.0.1 80; echo $?
-z nc가 데이터를 보내지 않고 수신 데몬만 검색하도록 지정합니다.이 옵션을 -l 옵션과 함께 사용하는 것은 오류입니다.
netstat을 사용하면 훨씬 더 빠른 결과를 얻을 수 있습니다.
Linux의 경우:
netstat -lnt | awk '$6 == "LISTEN" && $4 ~ /\.445$/'
Mac의 경우:
netstat -anp tcp | awk '$6 == "LISTEN" && $4 ~ /\.445$/'
포트에서 수신 중인 프로세스 목록을 출력하거나(이 예에서는 445개) 포트가 비어 있으면 아무것도 출력하지 않습니다.
넷캣을 사용할 수 있습니다.
nc ip port < /dev/null
서버에 연결하고 다시 직접 연결을 닫습니다.netcat가 연결할 수 없는 경우 0이 아닌 종료 코드를 반환합니다.종료 코드는 $? 변수에 저장됩니다.예를 들어,
nc ip port < /dev/null; echo $?
netcat가 포트에 성공적으로 연결할 수 있는 경우에만 0을 반환합니다.
스펜서 래스번의 대답을 바탕으로 bash를 사용합니다.
true &>/dev/null </dev/tcp/127.0.0.1/$PORT && echo open || echo closed
/dll/net/dll에 나열되어 있습니다.
16진수로 ":" 다음에 있는 두 번째 열입니다.
> cat /proc/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 10863 1 ffff88020c785400 99 0 0 10 -1
1: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 7983 1 ffff88020eb7b3c0 99 0 0 10 -1
2: 0500010A:948F 0900010A:2328 01 00000000:00000000 02:00000576 00000000 1000 0 10562454 2 ffff88010040f7c0 22 3 30 5 3
3: 0500010A:E077 5F2F7D4A:0050 01 00000000:00000000 02:00000176 00000000 1000 0 10701021 2 ffff880100474080 41 3 22 10 -1
4: 0500010A:8773 16EC97D1:0050 01 00000000:00000000 02:00000BDC 00000000 1000 0 10700849 2 ffff880104335440 57 3 18 10 -1
5: 0500010A:8772 16EC97D1:0050 01 00000000:00000000 02:00000BF5 00000000 1000 0 10698952 2 ffff88010040e440 46 3 0 10 -1
6: 0500010A:DD2C 0900010A:0016 01 00000000:00000000 02:0006E764 00000000 1000 0 9562907 2 ffff880104334740 22 3 30 5 4
7: 0500010A:AAA4 6A717D4A:0050 08 00000000:00000001 02:00000929 00000000 1000 0 10696677 2 ffff880106cc77c0 45 3 0 10 -1
그래서 나는 그것들 중 하나가:50
가 있어야 .
.man 5 proc
더 자세한 것은. 그리고 sed 등으로 그것을 분리하는 것은 온화한 독자를 위한 연습으로 남겨집니다...
ss -tl4 '( sport = :22 )'
2ms이면 충분합니까?
콜론을 추가하면 Linux에서 작동합니다.
nc -l 8000
여기서 8000은 포트 번호입니다.포트가 비어 있으면 쉽게 닫을 수 있는 서버가 시작됩니다.그렇지 않으면 오류가 발생합니다.
nc: Address already in use
Mac과 Linux 모두에서 작동하는 기능은 다음과 같습니다.
netstat -aln | awk '$6 == "LISTEN" && $4 ~ "[\\.\:]445$"'
리눅스 테스트 서버 중 하나에서 포트가 열려 있는지 확인하고 싶습니다.저는 제 개발 기계에서 테스트 서버로 텔넷으로 연결을 시도함으로써 그렇게 할 수 있었습니다.개발 시스템에서 다음을 실행해 보십시오.
$ telnet test2.host.com 8080
Trying 05.066.137.184...
Connected to test2.host.com
이 예에서는 호스트 test2.host.com 에서 포트 8080이 열려 있는지 확인하려고 합니다.
netcat 명령도 사용할 수 있습니다.
[location of netcat]/netcat -zv [ip] [port]
또는
nc -zv [ip] [port]
-z – 실제로 데이터를 보내지 않고 수신 데몬을 검색하도록 nc를 설정합니다.
-v – 상세 모드를 활성화합니다.
tcping은 오버헤드가 매우 낮은 훌륭한 도구입니다.또한 시간 제한 인수를 사용하여 시간을 단축할 수 있습니다.
[root@centos_f831dfb3 ~]# tcping 10.86.151.175 22 -t 1
10.86.151.175 port 22 open.
[root@centos_f831dfb3 ~]# tcping 10.86.150.194 22 -t 1
10.86.150.194 port 22 user timeout.
[root@centos_f831dfb3 ~]# tcping 1.1.1.1 22 -t 1
1.1.1.1 port 22 closed.
nmap
올바른 도구입니다. 간히사를 사용하세요.nmap example.com -p 80
로컬 또는 원격 서버에서 사용할 수 있습니다.또한 방화벽이 액세스를 차단하고 있는지 확인할 수 있습니다.
iptables를 사용하는 경우 다음을 시도합니다.
iptables -nL
또는
iptables -nL | grep 445
언급URL : https://stackoverflow.com/questions/9609130/efficiently-test-if-a-port-is-open-on-linux
'IT' 카테고리의 다른 글
추적 출력을 콘솔로 리디렉션 (0) | 2023.05.18 |
---|---|
파일 인쇄, 첫 번째 X줄 건너뛰기, Bash로 (0) | 2023.05.18 |
Xcode 7 베타 경고:인터페이스 방향 및 시작 스토리보드 (0) | 2023.05.18 |
socket.io 과 웹 소켓의 차이점 (0) | 2023.05.13 |
판다 다중 지수 - 열을 사용할 때 2단계를 선택하는 방법은 무엇입니까? (0) | 2023.05.13 |