일부 공백과 무시 블록으로 데이터를 수집하려면 어떻게 해야 합니까?

일부 공백과 무시 블록으로 데이터를 수집하려면 어떻게 해야 합니까?

다음에서 각 IP 주소가 사용하는 다른 블록의 포트 번호로 -port를 검색하여 파일에 저장 하려고 Local Address합니다 .Foreign AddressPID/Program name

나는 다음을 사용했다:

    netstat -natp | grep '^[a-z0-9P]*'

그 후에는 해당 포트 번호를 무시 Recv-Q하고 Send-Q차단하고 사용 하고 다시 무시 하고 사용하고 싶습니다 .Local AddressForeign AddressStatePID/Program name

어떤 정규 표현식이 나에게 도움이 될까요? 또한 각 주소 뒤에 두 포트 번호를 서로 다른 블록에 유지할 수 있다면 더 도움이 될 것입니다.

이것이 내가 가진 것입니다:

$ netstat -natp | grep '^[a-z0-9P]*'
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:5939          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:7071            0.0.0.0:*               LISTEN      -                   
tcp        0      0 192.168.42.157:37960    106.10.218.42:443       ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:35636    117.18.237.29:80        ESTABLISHED 21019/firefox       
tcp        1     32 192.168.42.157:40444    5.39.93.71:443          CLOSING     -                   
tcp        0      0 192.168.42.157:35626    52.27.200.224:443       TIME_WAIT   -                   
tcp        0      0 192.168.42.157:43004    122.252.255.200:80      ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:35734    117.18.237.29:80        TIME_WAIT   -                   
tcp        0      0 192.168.42.157:35776    52.27.200.224:443       TIME_WAIT   -                   
tcp        0      0 192.168.42.157:41690    54.182.1.219:443        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:56472    54.182.0.97:443         ESTABLISHED 21019/firefox       
tcp        1     32 192.168.42.157:48390    198.252.206.25:443      CLOSING     -                   
tcp        0      0 192.168.42.157:37322    34.107.221.82:80        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:57724    204.79.197.204:443      ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:43142    23.57.14.17:443         ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:46286    13.227.138.58:443       ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:55576    112.133.250.163:443     ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:52328    151.101.120.193:443     ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:35736    52.39.214.89:443        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:57252    99.83.135.170:443       ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:48394    198.252.206.25:443      ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:45020    54.182.0.113:443        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:50396    27.123.42.205:443       ESTABLISHED 21019/firefox       
tcp        1     32 192.168.42.157:48092    198.252.206.25:443      CLOSING     -                   
tcp        0      0 192.168.42.157:55798    142.250.192.99:80       TIME_WAIT   -                   
tcp        0      0 192.168.42.157:34190    157.240.16.52:443       ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:37320    34.107.221.82:80        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:44806    54.87.110.85:443        ESTABLISHED 21019/firefox       
tcp        0      0 192.168.42.157:51202    103.229.10.173:443      ESTABLISHED 21019/firefox       

이것이 내가 원하는거야:

Prot Local Address PortofLocalA  Foreign Address  PortofForeignA  PID/Program name    

그리고 그 아래의 모든 o/p

답변1

복잡하지만 다음을 시도해 볼 수 있습니다.

$ netstat -natp 2> /dev/null | awk 'NR==2 {printf("%s\t%s %s\t%s %s\t%s %s\n",$1,$4,$5,$6,$7,$9,$10)}
                                    NR>=3 {OFS="\t";print($1,$4,$5,$7)}'

편집하다
... 그리고 최종 출력에서 ​​IP 방향과 별도의 포트 열이 필요한 경우 완료를 위해 awk다음과 같이 에 보다 세밀한 형식을 도입할 수 있습니다.

  $ netstat -natp 2>/dev/null | awk '
      NR==2 {printf("%s\t%8s %s\tPort\t%8s %s\tPort\t%s\n",$1,$4,$5,$6,$7,$9)} 
      NR>=3 {$8=$7;
             idx=match($5,":[^:]+$");
             $7=substr($5,idx+1);
             $6=substr($5,1,idx-1);
             idx=match($4,":[^:]+$");
             $5=substr($4,idx+1);
             $4=substr($4,1,idx-1);
             printf("%s\t%16s\t%s\t%16s\t%s\t%s\n",$1,$4,$5,$6,$7,$8)}
     '
  Proto      Local Address        Port     Foreign Address        Port    PID/Program
  tcp              0.0.0.0        22               0.0.0.0        *       -
  tcp            127.0.0.1        631              0.0.0.0        *       -
  tcp            127.0.0.1        25               0.0.0.0        *       -
  tcp              0.0.0.0        445              0.0.0.0        *       -
  tcp            127.0.0.1        12150            0.0.0.0        *       -
  tcp              0.0.0.0        139              0.0.0.0        *       -
  tcp            127.0.0.1        37580          127.0.0.1        12150   2962/firefox
  tcp            127.0.0.1        12150          127.0.0.1        40684   -
  [...]
  tcp            127.0.0.1        12150           127.0.0.1       47646   -
  tcp            127.0.0.1        12150           127.0.0.1       48982   -
  tcp            127.0.0.1        12150           127.0.0.1       1414   -
  tcp6                  ::        22                    ::        *       -
  tcp6                 ::1        631                   ::        *       -     
  tcp6                  ::        445                   ::        *       -     
  tcp6                  ::        139                   ::        *       -

Gawk(GNU Awk) v5.1.0으로 테스트되었습니다. 위의 샘플 출력은 내 근처에 있는 무작위 상자에서 나온 것입니다.

이전 답변과의 차이점은 다음과 같습니다.

  • 각 레코드의 필드 4와 5에 대해 문자열의 idx마지막 문자 위치( )를 확인하세요 . :그 뒤에 오는 것은 포트입니다. 문자열의 시작은 IP입니다. 이는 IPv4 및 IPv6 IP 문자열 모두에 적용됩니다. 이는 예를 127.0.0.1:12345들어 IP와 포트 번호를 분리하는 데 유용합니다 .::1:432
  • 를 잃어서 OFS="\t"지정하다출력 필드 구분 기호두 번째 블록에 두 블록의 형식 지정 문자열 사이 와 내부의 awk적절한 위치에 정수 너비를 추가합니다 .%sprintfawk

답변2

완벽하지는 않지만 시작은 다음과 같습니다.

perl -ae 'printf("%-6s%16s%7s%16s%7s %7s %s\n", $F[0], $F[3] =~ /(.*):(.*)/, 
$F[4] =~ /(.*):(.*)/, $F[6] =~ /(\d*)\/?(.*)/) if $. > 2'

Out(사실 뒤에 헤더가 추가됨):

Proto    Local-Address   Port  Remote-Address   Port     PID  Program-name
tcp    192.168.122.100     53         0.0.0.0      *          -
tcp           10.0.0.8     53         0.0.0.0      *          -
tcp          127.0.0.1   9321       127.0.0.1  45396          -
tcp           10.0.0.8  45454  123.123.123.25    443     484  firefox
tcp          127.0.0.1  36363       127.0.0.1   3639   23018  weechat
tcp           10.0.0.8  23232  123.232.123.25    443     484  firefox
tcp           10.0.0.8  13131   22.123.123.33   6667   23415  irssi
tcp           10.0.0.8  45586    52.42.50.123    443   20538  firefox
tcp6                ::     80              ::      *          -
tcp6                ::     22              ::      *          -
tcp6               ::1    631              ::      *          -
tcp6                ::     25              ::      *          -
tcp6                ::    443              ::      *          -
tcp6         127.0.0.1     80       127.0.0.1  46922          -

관련 정보