
사실 나는 다음과 같은 것을 만들고 싶다ifconfig.me기능이 있지만 내부 네트워크에만 해당됩니다. 서버의 무언가가 일부 포트를 수신하고 연결된 원격 시스템의 IP를 보내는 방식으로 봅니다.
내 문제에 대한 훌륭한 유틸리티인 것 같습니다 nc
(또한 서버에 php/python/무엇이든 없습니다. 단지 쉘 및 표준 유닉스 도구만 있습니다).
원격 시스템에서 실행하고 연결하면 원격 IP 및 DNS 이름을 볼 수 있지만 nc -vv
원격 호스트로 보내는 방법을 찾을 수 없습니다.
아니면 내가 너무 이상한 길을 선택했는데 또 다른 더 간단한 해결책이 있는 걸까요?
답변1
다음과 같이 사용할 수 있습니다.
while true; do nc -lvp 1337 -c "echo -n 'Your IP is: '; grep connect my.ip | cut -d'[' -f 3 | cut -d']' -f 1" 2> my.ip; done
nc
1337
원격 호스트에 대한 정보를 기록하는 자세한 옵션을 사용하여 포트에서 수신 대기하는 무한 루프에서 실행됩니다 stderr
. stderr
파일로 리디렉션됩니다 my.ip
. 연결을 "처리"하기 위해 무언가를 실행할 수 있는 옵션 -c
입니다 . nc
이 경우 다음에는 my.ip
파일에서 IP 주소를 grep합니다.
pbm@lantea:~$ curl http://tauri:1337
Your IP is: 192.168.0.100
답변2
while true; do nc -l -v 3333 2> status | while read msg; do ip=$(cat status | grep -o -P '(?<=from).*(?=port)') && notify-send "$ip" "$msg" -i gtk-network; done ; done
리디렉션표준 오류라는 파일에상태; 그런 다음 파일에서 원격 커넥터의 IP를 읽습니다. 마침내 inform-osd 메시지에 IP가 표시됩니다.
메모:
누군가가 다른 컴퓨터에서 동일한 포트에 연결할 때체크 안함일반적으로 이것을 stderr: 에 넣습니다 connection from 10.10.0.1 port 3333 [tcp/*] accepted
. 나는 단순히 다음을 사용하여 IP 주소를 추출합니다.grep.