Port4me 도구 :
[1024,65535]에서 무료 TCP 포트를 찾을 수 있습니다.
다중 사용자 환경에서 작동하도록 설계되었습니다
다른 사용자, 다른 포트를 제공합니다
시간이 지남에 따라 동일한 포트를 확률로 제공합니다.
다른 소프트웨어 도구에 대해 다른 포트를 제공합니다
구성이 필요하지 않습니다
모든 운영 체제 및 모든 일반적인 프로그래밍 언어에서 완벽하게 재현 할 수 있습니다.
Bash, Python 및 r에 사용할 수 있습니다
무료 TCP 포트를 식별하는 도구가 많이 있으며 대부분은 임의의 포트를 반환합니다. 기술적으로 작동하지만 특정 도구를 사용해야 할 때마다 사용자가 새로운 임의의 포트 번호를 입력 해야하는 경우 공정한 마찰이 추가 될 수 있습니다.
대조적으로, PORT4ME는 확률이 높은 확률로 다른 날에 사용될 때에도 매번 동일한 포트를 사용자에게 제공하려고 시도합니다. 그것은 동일한 결정 론적, 의사 랜덤 시퀀스의 포트 시퀀스를 스캔하여이를 달성하고 첫 번째 자유 포트 감지를 반환합니다. 각 사용자는 자체 임의의 포트 시퀀스를 얻어 두 사용자가 동일한 포트를 요청할 위험을 줄입니다. 무작위성은 사용자 이름 ( USER )의 함수 인 임의의 시드와 선택적으로 포트를 사용하는 소프트웨어 이름으로 시작됩니다.
Port4ME 알고리즘은 대부분의 알려진 프로그래밍 언어로 구현 될 수 있으며 구현 언어에 관계없이 완벽하게 재현 가능한 시퀀싱을 생성 할 수 있습니다.
우리가 배쉬 쉘에서 사용자 alice 로 로그인했다고 가정하면, 인수없이 port4me 호출하면 무료 포트가 제공됩니다.
{alice}$ port4me
30845나중에 볼 수 있듯이 시스템의 각 사용자는 고유 한 포트를 얻을 수 있습니다. 이로 인해 일부 소프트웨어 도구가 사용해야하는 포트를 지정하는 데 사용될 수 있습니다.
{alice}$ jupyter notebook --port " $( port4me ) " 이 포트를 사용할 수있는 한 alice 항상 쉘 세션과 시간이 지남에 따라 동일한 포트를 얻습니다. 예를 들어, 그들이 다음 주에 돌아와 다시 시도해도 여전히 얻을 수 있습니다.
{alice}$ port4me
30845
{alice}$ port4me
30845그러나 포트 30845가 이미 점유 된 경우 의사 랜덤 시퀀스의 다음 포트가 고려됩니다.
{alice}$ port4me
19654처음 5 개의 포트를 보려면 실행 :
{alice}$ port4me --list=5
30845
19654
32310
63992
15273 이 랜덤 시퀀스는 시드 스트링의 해시 코드를 통해 설정할 수있는 임의의 시드에 의해 시작됩니다. 기본적으로 현재 사용자의 이름 (예 : 환경 변수 $USER )을 기준으로합니다. 예를 들어, 사용자 bob 이 port4me 도구를 사용하면 다른 포트 세트가 스캔되는 것을 볼 수 있습니다.
{bob}$ port4me --list=5
54242
4930
42139
14723
55707 테스트 및 데모 목적으로 옵션 --user 지정하여 다른 사용자를 모방 할 수 있습니다.
{alice}$ port4me
30845
{alice}$ port4me --user=bob
54242
{alice}$ port4me --user=carol
34307 때때로 사용자는 동시에 2 개 이상의 포트를 사용하고자합니다. 예를 들어 Rstudio Server 용 Port, Jupyter Notebook 용 포트. 이 경우 옵션 --tool 지정하여 사용자와 도구 모두에 고유 한 포트 시퀀스를 초래할 수 있습니다. 예를 들어,
{alice}$ port4me
30845
{alice}$ port4me --tool=rstudio
22486
{alice}$ port4me --tool=jupyter-notebook
29525 편의를 위해 첫 번째 옵션이 이름이없는 경우 --tool 옵션을 지정한다고 가정합니다. 이것은 다음과 같은 형태를 사용할 수 있음을 의미합니다.
{alice}$ port4me jupyter-notebook
47467이를 통해 다른 소프트웨어 도구에 대해 다른 포트를 얻을 수 있습니다.
{alice}$ rserver --www-port " $( port4me rstudio ) "그리고
{alice}$ jupyter notebook --port " $( port4me jupyter-notebook ) " 사용 가능한 제한된 포트 세트가 있기 때문에 (1024-65535), 다른 프로세스가 주어진 포트를 차지할 위험이 항상 있습니다. 동일한 기계에 사용자가 많을수록 위험이 높아집니다. 사용자가 운이 좋지 않으면 자주 경험할 수 있습니다. 예를 들어, alice 첫 번째 포트 (30845)가 10 번만 작동하고, 두 번째 포트 (19654)는 100 번 99 번 작동하며 세 번째 포트 (32310)는 거의 작동하지 않습니다. 그렇다면 옵션 --exclude 통해 쉼표로 구분 된 값으로 지정하여 점유 될 가능성이 가장 높은 포트를 배제하도록 선택할 수 있습니다.
{alice}$ port4me --exclude=30845,32310
19654 명령 줄 옵션을 통해이를 지정하는 대안은 환경 변수 PORT4ME_EXCLUDE 를 통해 이들을 지정하는 것입니다.
{alice}$ PORT4ME_EXCLUDE=30845,32310 port4me
19654이것을 영구적으로 설정하려면 다음을 추가하십시오.
# # port4me customization
# # https://github.com/HenrikBengtsson/port4me
PORT4ME_EXCLUDE=30845,32310
export PORT4ME_EXCLUDE 쉘 스타트 업 스크립트, 예를 들어 ~/.bashrc .
이렇게하면 사용자가 시간이 지남에 따라 동일한 포트로 끝날 가능성이 높아집니다. 편리합니다. 이는 편리합니다. 이는 포트 매개 변수를 변경할 필요없이 매번 명령 줄 이력에서 사용할 수있는 동일한 통화를 재사용 할 수 있기 때문입니다.
환경 변수 PORT4ME_EXCLUDE 개별 사용자가 사용하기위한 것입니다. 사용자와 상관없이 제외 될 포트 세트를 지정하려면 PORT4ME_EXCLUDE_SITE 설정하십시오. 예를 들어, 시스템 관리자는 file /etc/profile.d/port4me.sh 에 다음을 추가하여 추가 포트 세트를 제외하도록 선택할 수 있습니다.
# # port4me: always exclude commonly used ports
# # https://github.com/HenrikBengtsson/port4me
PORT4ME_EXCLUDE_SITE=
# # MySQL
PORT4ME_EXCLUDE_SITE= $PORT4ME_EXCLUDE_SITE ,3306
# # ZeroMQ
PORT4ME_EXCLUDE_SITE= $PORT4ME_EXCLUDE_SITE ,5670
# # Redis
PORT4ME_EXCLUDE_SITE= $PORT4ME_EXCLUDE_SITE ,6379
# # Jupyter
PORT4ME_EXCLUDE_SITE= $PORT4ME_EXCLUDE_SITE ,8888
export PORT4ME_EXCLUDE_SITE Port4ME는 위 메커니즘을 통해 제외 된 포트 외에도 Chrome 및 Firefox 웹 브라우저에서 안전하지 않은 것으로 간주되는 포트를 제외합니다. 이 동작은 환경 변수 PORT4ME_EXCLUDE_UNSAFE 에 의해 제어 될 수 있으며, {chrome},{firefox} 로 기본적으로 변합니다. Token {chrome} chrome 블록의 포트 세트로 기본적으로 포트 PORT4ME_EXCLUDE_UNSAFE_CHROME 의 값으로 확장되고 {firefox} 는 PORT4ME_EXCLUDE_UNSAFE_FIREFOX 의 값으로 확장되며, 이는 Firefox 블록의 세트로 기본적으로 확장됩니다.
포트 세트를 제외하고 유사하게 명령 줄 옵션 --include 지정하여 스캔 할 포트 세트를 제한 할 수 있습니다.
{alice}$ port4me --include=2000-2123,4321,10000-10999
10451 여기서 기본값은 --include=1024-65535 에 해당합니다. --exclude , --include 환경 변수를 통해 지정할 수 있습니다. PORT4ME_INCLUDE 및 PORT4ME_INCLUDE_SITE .
자유 포트의 사용자 별 의사 랜덤 포트 시퀀스를 스캔하는 것 외에도 명령 줄 옵션 --prepend 지정하여 임의의 포트 앞에 사전 정의 된 포트 세트를 고려할 수도 있습니다.
{alice}$ port4me --prepend=4321,11001 --list=5
4321
11001
30845
19654
32310 명령 줄 옵션을 통해이를 지정하는 대안은 환경 변수 PORT4ME_PREPEND 를 통해 이들을 지정하는 것입니다.
{alice}$ PORT4ME_PREPEND=4321,11001 port4me --list=5
4321
11001
30845
19654
32310 환경 변수 PORT4ME_PREPEND 개별 사용자가 사용하기위한 것입니다. 사용자와 상관없이 선불화 할 포트 세트를 지정하려면 PORT4ME_PREPEND_SITE 설정하십시오.
모든 PORT4ME 구현은 식별 된 포트를 표준 출력 (STDOUT)으로 출력합니다. 이를 통해 표준 쉘 메소드 (예 : port="$(port4me)" 로 쉽게 캡처 할 수 있습니다. 어떤 포트 번호가 생성되었는지 확인하려면 tee 사용하여 포트를 표준 오류 (STDERR)로 보냅니다. 이는 터미널에서 볼 수 있습니다. 예를 들어,
{alice}$ jupyter notebook --port " $( port4me --tool=jupyter-notebook | tee /dev/stderr ) "
29525Portme 의 배쉬 버전을 설치하려면 다음을 수행하십시오.
VERSION=0.7.1
curl -L -O https://github.com/HenrikBengtsson/port4me/archive/refs/tags/ " ${VERSION} .tar.gz "
tar -x -f " ${VERSION} .tar.gz "
export PREFIX=/path/to/port4me/ # # must be an absolute path to a folder
(cd " port4me- ${VERSION} /bash " ; make install)그런 다음 다음과 같이 실행합니다.
$ export PATH=/path/to/port4me/bin: $PATH
$ port4me --version
0.7.1CRAN에서 사용할 수있는 r portme 패키지를 설치하려면 r 내에서 다음을 호출하십시오.
install.packages( " port4me " )시도해 보려면 다음으로 전화하십시오.
> port4me :: port4me( " jupyter-notebook " )
[ 1 ] 47467또는
$ Rscript -e port4me::port4me jupyter-notebook
29525Python 패키지 Port4me는 PYPI를 사용할 수 있습니다. Python Portme 패키지를 개인 Python 패키지 라이브러리에 설치하려면 명령 줄에서 다음을 호출하십시오.
$ pip install --user port4me 파이썬 가상 환경에 설치하려면 옵션 --user 드롭하십시오.
시도해 보려면 다음으로 전화하십시오.
>>> from port4me import port4me
>>> port4me( " jupyter-notebook " )
29525또는
$ python -m port4me --tool=jupyter-notebook
29525 32 비트 부호없는 정수 산술을 사용하여 알고리즘을 구현할 수 있어야합니다. 가장 큰 대표 정수가 초과 할 수 있다고 가정해서는 안됩니다.
의사 무작위 포트 시퀀스는 포트를 균일하게 샘플링해야합니다
최소한 바닐라 SH*, CSH, BASH, C, C ++, FORTRAN, LUA, PYTHON, R 및 RUBY에서 알고리즘을 구현할 수 있어야 합니다. (*) 정수 산술을 지원하지 않는 쉘은 expr , dc , bc 및 awk 와 같은 도구를 사용할 수 있습니다.
모든 프로그래밍 언어는 동일한 임의의 시드가 주어진 동일한 의사 랜덤 포트 시퀀스를 생성해야합니다.
구현은 R 및 Python 스크립트에서 소스 코드로 소스 코드로 복사 할 때도 작동하도록 작성되어야합니다.
식별 된 자유 포트는 접두사 또는 접미사 기호없이 표준 출력 (STDOUT)에 숫자로만 출력해야합니다.
사용자는 환경 변수 PORT4ME_EXCLUDE (예 : PORT4ME_EXCLUDE=8080,4321 를 지정하여 사전 정의 된 포트 세트를 제외 할 수 있어야합니다.
시스템 관리자는 환경 변수 PORT4ME_EXCLUDE_SITE 지정하여 제외 할 사전 정의 된 포트 세트를 PORT4ME_EXCLUDE_SITE=8080,4321 수 있어야합니다. 이것은 PORT4ME_EXCLUDE 에 보완적인 작동합니다.
사용자는 환경 변수 PORT4ME_SKIP (예 : PORT4ME_SKIP=5 )을 지정하여 자신의 의지에 따라 특정 수의 임의 포트를 건너 뛸 수 있어야합니다. 기본값은 skiping을 건너 뛰는 것입니다. 이는 PORT4ME_SKIP=0 에 해당합니다. 포트가 PORT4ME_EXCLUDE 및 PORT4ME_EXCLUDE_SITE 에 의해 제외 된 후 건너 뛰기가 적용되어야합니다.
새로운 구현은 이미 기존 구현에 의해 생성 된 포트 시퀀스를 완벽하게 재현해야합니다.
선형 합동 발전기 (LCG)는 의사 랜덤 포트 시퀀스를 생성하는 데 사용됩니다.
다음 씨앗,
LCG 알고리즘은 현재 LCG 시드가 안에 있다고 가정해서는 안됩니다.
LCG 알고리즘은 입력 시드와 동일한 출력 시드를 생성 할 수 있습니다.
LCG 매개 변수가 있어야합니다
이것은 32 비트 정수 산술 만 필요합니다
초기 씨앗이 있다면
32 비트 정수 문자열 해시 코드는 정수를 생성하는 데 사용됩니다.
문자열 해시 코드는 초기 LCG 시드로 사용됩니다.
LCG 씨앗이 들어 있어야합니다
해시 코드가 주어졌습니다