netstat을 사용해 특정 포트를 사용하는 프로세스의 프로세스 아이디를 찾아보자


환경

  • Ubuntu
  • CentOS
  • netstat(8)


netstat을 사용해 특정 포트를 사용하는 프로세스의 프로세스 아이디 찾기

netstat

netstat -nltup | grep [port_number]

예시

twpower@twpower-private-server:~$ netstat -nltup | grep 8888
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      622522/python3.9


netstat과 옵션

netstat

  • 네트워크 연결, 라우팅 테이블, 인터페이스 통계, 마스커레이드 연결 그리고 멀티캐스트 멤버십을 출력해준다.
NETSTAT(8)               Linux System Administrator's Manual              NETSTAT(8)

NAME
       netstat  -  Print  network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

사용한 옵션

  • n: 호스트명이 아니라 숫자의 IP주소로 보여준다.
  • l: LISTEN 상태의 네트워크 연결과 유닉스 소켓을 보여준다.
  • t: TCP 프로토콜 데이터를 보여준다.
  • u: UDP 프로토콜 데이터를 보여준다.
  • p: 프로세스 아이디와 프로세스명을 보여준다.


참고자료

Find process id of process using specific port with netstat


Environment and Prerequisite

  • Ubuntu
  • CentOS
  • netstat(8)


Find process id of process using specific port with netstat

netstat

netstat -nltup | grep [port_number]

Usage

twpower@twpower-private-server:~$ netstat -nltup | grep 8888
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      622522/python3.9


netstat and option

netstat

  • Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
NETSTAT(8)               Linux System Administrator's Manual              NETSTAT(8)

NAME
       netstat  -  Print  network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

Used Options

  • n: Show numeric IP address not hostname.
  • l: Show LISTEN state of network connections and unix sockets.
  • t: Show TCP protocol datas.
  • u: Show UDP protocol datas.
  • p: Show process id and name.


Reference

ProxyJump를 사용하여 프록시 서버나 점프 호스트를 통해 서버에 접속해보자


환경

  • Linux
  • SSH


ProxyJump

목적

보안을 위해 실서버 접속시 프록시 혹은 점프 호스트를 통해서만 접속할 수 있는 구조가 많이 사용되는데 번거롭게 ssh 명령어를 각각 사용하는것보다 ProxyJump를 사용하면 한번의 설정으로 보다 쉽게 접속이 가능하다.


사용법

  • 형태
Host [proxy server name]
    HostName [proxy or jump host domain or ip address]
    Port [port number]
    User [username]
    IdentityFile [proxy or jump host identity key file]

Host [remote server name]
    HostName [server domain or ip address]
    Port [port number]
    User [username]
    IdentityFile [server identity key file]
    ProxyJump [proxy server name]


예제

  • Local -> proxy-server -> remote-server
  • 접속시 사용하는 IdentityFile은 둘 다 Local에 있어야 한다.
  • 아래는 예제 용도로 운영시에는 아래와 달리 Local -> proxy-server는 외부망으로 연결되어 있고 proxy-server -> remote-server는 내부망으로만 연결되어있는 경우가 많다.
Host proxy-server
    HostName 192.168.64.3
    Port 22
    User twpower
    IdentityFile ~/.ssh/proxy-server

Host remote-server
    HostName 192.168.64.4
    Port 22
    User twpower
    IdentityFile ~/.ssh/remote-server
    ProxyJump proxy-server
  • 바로 remote-server로 접속
ssh remote-server


참고자료

Access server via proxy server or jump host using ProxyJump


Environment and Prerequisite

  • Linux
  • SSH


ProxyJump

Purpose

Many systems use proxy or jump host to connect production server due to security. It is comfortable to use ProxyJump rather than use ssh command separately.


Usage

  • Format
Host [proxy server name]
    HostName [proxy or jump host domain or ip address]
    Port [port number]
    User [username]
    IdentityFile [proxy or jump host identity key file]

Host [remote server name]
    HostName [server domain or ip address]
    Port [port number]
    User [username]
    IdentityFile [server identity key file]
    ProxyJump [proxy server name]


Example

  • Local -> proxy-server -> remote-server
  • Both IdentityFile should be located in Local.
  • Below case is only for example. In real production, Local -> proxy-server is usually public network and proxy-server -> remote-server is usually private network.
Host proxy-server
    HostName 192.168.64.3
    Port 22
    User twpower
    IdentityFile ~/.ssh/proxy-server

Host remote-server
    HostName 192.168.64.4
    Port 22
    User twpower
    IdentityFile ~/.ssh/remote-server
    ProxyJump proxy-server
  • Access direct to remote-server
ssh remote-server


Reference

API 호출시 겪었던 일에 대한 정리


환경

  • API 호출 경험


API 호출시 겪었던 일

기존에 잘 작동하던 코드가 있었다. API 호출한 결과를 가져와서 필터링을 통해 원하는 조건의 값들만을 가져오는 코드였다. 그런데 잘 작동하던 코드가 갑자기 안되는 경우가 생겼다… 살펴보니 분명히 웹에서 검색했을때는 우리가 원하는 값들이 있었는데 필터링 했을때는 해당하는 값들이 없다는거였다. 한참을 살펴봤지만 코드에는 문제가 없는거 같았다. 하지만 역시 제대로 보니 코드에 문제가 있었었다. 역시 코드가 잘못이 아니라 작성한 사람의 잘못이었다!

다른분의 도움으로 발견한 부분이었는데 문제의 해결은 필터링 하기전에 값들이 딱 100과 같이 5나 10의 배수로 깔끔하게 나오는거에서 영감을 받았다. 알고보니 코드에서는 API를 통해 전체 값들을 가져오고 그걸 필터링하는 과정으로 원하는 값을 가져오는데 호출시 가져오는 아이템 수가 정해져있어서 원하는 값들이 웹상에 있어도 API 요청으로 오지 않는거였다. 즉, API 호출시 최대 아이템 수가 제한이 있었던게 문제였다.

예를 들면 원하는 값이 101번째에 있는데 100번째까지만 응답이 와서 필터링해도 원하는 101번째 값이 나오지 않는거다.

결국 API 호출시 조건을 최대한 걸어서 원하는 값들만 가져오고 최대 아이템 수가 온다면 다음 값들을 가져오는 방식으로 코드를 수정해서 문제를 해결할 수 있었다.

여기서 배운점이 3가지 정도가 있다.

  1. API 호출시 전체를 가져와서 필터링하기보다 조건을 넣을 수 있다면 API 호출시 미리 넣는게 요청자쪽에서의 부담과 실수를 줄일 수 있다.
  2. API 호출시 최대 응답 아이템 수가 정해져 있는 경우가 많으니 이를 주의하자.
  3. 문제를 함께 해결하면 아이디어가 생겨서 도움이 될 수 있다.

어찌보면 당연한 이야기지만 해당 부분으로 시간을 좀 소요해서 정리를 해봤다.

다음부터는 실수하지 말자!


참고자료