리눅스 네트워크/라우팅 테이블/프로그래밍 언어 사용하기 (교육 23일차)

SW·2022년 12월 22일
0




호스트OS는 기본으로 .1번 주소를 가지고 있다.



IPv4 자동으로 IP주소 받기 설정 시 DHCP 서버에서 IP를 자동 설정한다.

  • DHCP 서버 역할은 공유기가 한다.






윈도우 네트워크
ncpa.cpl
cmd ->
ipconfig
ipconfig/?

리눅스 네트워크
ifconfig: CentOS 7에서는 net-tools 패키지를 설치해야 사용할 수 있다.
ip a

리눅스도 라우터 역할을 할 수 있다. why? 7 Layer의 L7 장비이기 때문이다.

실습> ifconfig 사용하기

CentOS 7 부터 eth0 이라는 이름이 없어졌고 ens33, 혹은 다른 이름이 지정되어 있다.
eth0으로도 이름을 변경할 수 있지만 변경할 필요가 없다.

ifconfig 명령어만 실행하면 모든 인터페이스가 출력된다.
sh ip int b와 비슷하다고 생각하면 된다.

패키지명 : ~ .exe

1. 레드햇 계열
#yum -y 패키지명 -> 버전 업되면서 dnf로 변경함. (RHEL 8버전~)

2. 데비안 계열
apt
apt-get

ifconfig 명령어가 저장된 패키지를 설치한다.
yum: 패키지를 설치하는 명령어
형식: yum [옵션] 명령어 패키지명
install 명령어: 패키지를 설치하는 명령어
#yum -y install net-tools

#ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 200.200.200.3 netmask 255.255.255.0 broadcast 200.200.200.255
inet6 fe80::5d38:3527:e36c:4fed prefixlen 64 scopeid 0x20
ether 00:0c:29:df:f5:49 txqueuelen 1000 (Ethernet)
RX packets 19548 bytes 27763403 (26.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8645 bytes 552212 (539.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5912 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5912 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ifconfig 에 인수 부분이 나오면 해당 인터페이스만 출력된다.
[root@localhost ~]# ifconfig lo
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5912 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5912 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 200.200.200.3 netmask 255.255.255.0 broadcast 200.200.200.255
inet6 fe80::5d38:3527:e36c:4fed prefixlen 64 scopeid 0x20
ether 00:0c:29:df:f5:49 txqueuelen 1000 (Ethernet)
RX packets 19590 bytes 27766561 (26.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8668 bytes 555714 (542.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo 다운(비활성화) 시킨다.
int fa0/0 sh
[root@localhost ~]# ifconfig lo down
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 200.200.200.3 netmask 255.255.255.0 broadcast 200.200.200.255
inet6 fe80::5d38:3527:e36c:4fed prefixlen 64 scopeid 0x20
ether 00:0c:29:df:f5:49 txqueuelen 1000 (Ethernet)
RX packets 19648 bytes 27771064 (26.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8700 bytes 559118 (546.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo 업 시킨다.
int fa0/0 no sh
[root@localhost ~]# ifconfig lo up
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 200.200.200.3 netmask 255.255.255.0 broadcast 200.200.200.255
inet6 fe80::5d38:3527:e36c:4fed prefixlen 64 scopeid 0x20
ether 00:0c:29:df:f5:49 txqueuelen 1000 (Ethernet)
RX packets 19696 bytes 27774664 (26.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8726 bytes 562042 (548.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5912 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5912 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

실습> IP주소 변경하기

1. IP주소 변경하기

📌 변경하는 방법 (외우기) 📌
1. 일시적으로 IP주소를 변경한다.
라우팅 테이블이 삭제가 되면
2. 네트워크를 추가한다.
3. Default Gateway를 추가한다.

200.200.200.3/24 -> 200.200.200.33/24

#ifconfig ens33 200.200.200.33 netmask 255.255.255.0 broadcast 200.200.200.255
#route add -net 200.200.200.0 netmask 255.255.255.0 dev ens33
#route add default gw 200.200.200.2

#ifconfig
#ping -c 4 8.8.8.8

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 200.200.200.33 netmask 255.255.255.0 broadcast 200.200.200.255
inet6 fe80::5d38:3527:e36c:4fed prefixlen 64 scopeid 0x20
ether 00:0c:29:df:f5:49 txqueuelen 1000 (Ethernet)
RX packets 19801 bytes 27784590 (26.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8795 bytes 571814 (558.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5912 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5912 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

C:\Users\user2>ssh root@200.200.200.33

2. IP주소 변경하기

200.200.200.33/24 -> 200.200.200.3/24

📌 변경하는 방법 (외우기) 📌
1. 일시적으로 IP주소를 변경한다.
라우팅 테이블이 삭제가 되면
2. 네트워크를 추가한다.
3. Default Gateway를 추가한다.


일시적으로 IP주소를 변경한다.

[root@localhost ~]# ifconfig ens33 200.200.200.3 netmask 255.255.255.0 broadcast 200.200.200.255

라우팅 테이블이 삭제가 되면
– 네트워크를 추가한다.
– 3. Default Gateway를 추가한다.
[root@localhost ~]# route -n
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface

라우팅 테이블이 삭제가 되었기 때문에 네트워크를 추가한다.
[root@localhost ~]# route add -net 200.200.200.0 netmask 255.255.255.0 dev ens33

라우팅 테이블이 삭제가 되었기 때문에 Default Gateway를 추가한다.
이때 dev ens33은 NIC가 하나이므로 생략이 가능하고 만약에 여러 개이면 반드시 써줘야 한다.
[root@localhost ~]# route add default gw 200.200.200.2 dev ens33
[root@localhost ~]# route -n

실습> 라우팅 테이블에 네트워크 추가하기

5개의 네트워크를 라우팅 테이블에 추가
– 10.10.10.0/24
– 20.20.20.0/24
– 100.100.100.128/25
– 192.168.100.0/24
– 192.168.1.0/26

실습> 라우팅 테이블에 네트워크 삭제하기

– 10.10.10.0/24
– 20.20.20.0/24
– 100.100.100.128/25
– 192.168.100.0/24
– 192.168.1.0/26

실습> 라우팅 테이블에 네트워크 추가/삭제하기

5개의 네트워크를 라우팅 테이블에 추가/삭제
– 10.10.10.0/24
– 20.20.20.0/24
– 100.100.100.128/25
– 192.168.100.0/24
– 192.168.1.0/26

CentOS 7에서 네트워크 정보가 저장된 파일(text 형식)
파일의 위치: /etc/sysconfig/network-scripts/ifcfg-인터페이스명

/etc/sysconfig/network-scripts/ifcfg-ens33

※ 저장 파일 경로
마운트 /etc/fstab
네트워크 /etc/sysconfig/network-scripts/ifcfg-ens33

[root@localhost ~]# ll /etc/sysconfig/network-scripts/ifcfg-ens33
-rw-r--r--. 1 root root 380 12월 20 16:20 /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3f40b59f-09ed-4fcd-9002-2bf61168dfbd
DEVICE=ens33
ONBOOT=yes
IPADDR=200.200.200.3
PREFIX=24
GATEWAY=200.200.200.2
DNS1=168.126.63.1
DNS2=168.126.63.2
USERS=root

IP주소 할당 방식: Static
인터페이스명: ens33
부팅 시 활성 여부: 활성화
IP Address: 200.200.200.3
Subnet Mask: 255.255.255.0
Default Gateway: 200.200.200.2
DNS1: 168.126.63.1
DNS2: 168.126.63.2

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none <--
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3f40b59f-09ed-4fcd-9002-2bf61168dfbd
DEVICE=ens33 <--
ONBOOT=yes <--
IPADDR=200.200.200.3 <--
PREFIX=24 <--
GATEWAY=200.200.200.2 <--
DNS1=168.126.63.1 <--
DNS2=168.126.63.2 <--

USERS=root







SHELL : 변수의 값은 무조건 붙여서 쓴다. (띄어쓰면 에러남)
HW < 커널 < SHELL < 사용자
SHELL -> #a=1 -> 파싱(분석)
변수=값
cf) # a = 1 : 명령어 = 인수로 인식하여 에러남.



[root@localhost ~]# nmtui
<-- vi에서 수정된 내용이 없고 nmtui에서 막 적어 놓은 정보가 그대로 남아 있음

[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip a
[root@localhost ~]# nmtui
<-- 네트워크를 재시작하면 vi로 편집한 내용이 적용되어 있음

📌 프로그래밍 언어 사용하기 📌

프로그래밍 언어를 알아야 하는 이유
– 화이트 해커가 되기 위해서 필요하다.

검색: 프로그래밍 순위 tiobe
https://ko.wikipedia.org/wiki/전기전자공학자협회

https://spectrum.ieee.org/top-programming-languages-2022

Shell Script: 인터프리터 언어
Python: 인터프리터 언어
C: 컴파일 언어
Java: 컴파일 언어

https://ko.wikipedia.org/wiki/프로그래밍_언어
https://ko.wikipedia.org/wiki/셸_스크립트
https://ko.wikipedia.org/wiki/파이썬
https://ko.wikipedia.org/wiki/자바_(프로그래밍_언어)
https://ko.wikipedia.org/wiki/C_(프로그래밍_언어)

실습> vi 사용하기

vi: notepad
vim: wordpad

#yum -y install vim
#vi .bashrc
alias vi='vim'
#. .bashrc

#vi /etc/vimrc
:
:(생략)
set nu "번호 출력
set ai "자동 들여쓰기
set ci "C언어 자동 들여쓰기
set bg=dark "배경색
set ts=4 "탭 크기
set sw=4 "들여쓰기 내어쓰기 크기
set expandtab "탭을 공백으로 변경
set cursorline "커서 위치 표시

실습> 프로그래밍 언어를 배워보자

– Shell Script : 인터프리터 언어
– Python : 인터프리터 언어
– C : 컴파일 언어
– Java : 컴파일 언어

공통: 디렉터리 위치는 자신의 홈디렉터리에서 소스코드를 작성한다.
#cd
#pwd
/root

1. Shell Script
실행 순서: 소스코드 작성 -> 권한 변경 -> 실행

o 소스코드 작성
#vi hello1.sh
#!/bin/sh
-> sh는 쉘 프로그램 해석기.
보통 실행권한이 없는 파일을 실행시킬 때 실행하는 명령어.
rw-rw-rw- 이런 파일들.
보통 쉘 스크립트는 첫줄에 다음과 같은 구문을 볼 수 있다.
#!/bin/bash or #!/bin/sh
이것은 쉘 스크립트를 해당 쉘에서 해석하여 실행하는 것을 말한다.

#파일명: hello1.sh
#프로그램 설명: 쉘스크립트를 이용한 첫 번째 프로그램
#작성자: SW

echo "Hello World!"

o 권한 변경
#chmod 755 hello1.sh

📌 chmod 755
: 755는 소유자만 모든 것(쓰기, 읽기, 실행)이 가능하고 그 외 사용자의 경우는 읽기, 실행은 가능하나 쓰기는 불가능하다.

o 실행
#./hello1.sh
Hello World!
#/root/hello1.sh
Hello World!

2. python
python은 이미 설치된 버전은 2.7.x 버전이므로 3.8.x 을 설치하고 진행한다.
python 2.x 버전은 이미 단종되었기 때문에 3.x 버전으로 테스트를 진행한다.

실행 순서1: 소스코드 작성 -> 실행
실행 순서2: 소스코드 작성 -> 권한 변경 -> 실행

공식사이트: https://python.org/

기본적으로 설치된 버전은 python2 버전이다.
#python
Python 2.7.5 (default, Oct 14 2020, 14:45:30)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>quit()

python3.8 버전을 설치한다.
#yum -y install centos-release-scl
#yum -y install rh-python38
#scl enable rh-python38 bash
#echo 'scl enable rh-python38 bash' >> ~/.bash_profile

#python
Python 3.8.13 (default, Aug 16 2022, 12:16:29)
[GCC 9.3.1 20200408 (Red Hat 9.3.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>quit()

첫 번째 실행방법: python3 명령어의 인수로 전달하는 방법
실행 순서1: 소스코드 작성 -> 실행
#vi hello2.py
"""
파일명: hello2.py
프로그램 설명: 파이썬을 이용한 첫 번째 프로그램
작성자: SW
"""

print("Hello World!")

#python hello2.py
Hello python!

두 번째 실행방법: 파일을 실행권한을 부여해서 실행파일처럼 실행하는 방법
실행 순서2: 소스코드 작성 -> 권한 변경 -> 실행

#vi hello3.py
#!/usr/bin/env python
"""
파일명: hello3.py
프로그램 설명: 파이썬을 이용한 두 번째 프로그램
작성자: SW
"""

print("Hello World!")

#chmod 755 hello3.py
#./hello3.py

Hello World!
yum 도 Python으로 작성되었음.

3. C

CentOS에서 64bit, 32bit로 컴파일하기 위해서는 아래 패키지를 설치해야 한다.
#yum -y install gcc glibc-devel.x86_64 glibc.i686 glibc-devel.i686 libgcc.i686 libstdc++.i686

실행 순서: 소스코드 작성 -> 컴파일 -> 실행

#vi hello4.c
/*
파일명: hello4.c
프로그램 설명: C언어를 이용한 첫 번째 프로그램
작성자: SW
**/
#include <stdio.h>

int main()
{
printf("Hello World!\n");
return 0;
}

64bit 용으로 컴파일을 한다.
#gcc hello4.c -o hello4
#ll
#file hello4
hello4: ELF 64-bit LSB executable, x86-64, ... (생략)
#./hello4
Hello World!

32bit 용으로 컴파일을 한다.
#gcc -m32 hello4.c -o hello4
#file hello4
hello4: ELF 32-bit LSB executable, Intel 80386, ... (생략)
#./hello4
Hello World!

4. Java
실행 순서: 소스코드 작성 -> 컴파일 -> 실행

Java를 이용한 프로그램을 개발할 때 컴파일하기 위해서는 아래 두 개의 패키지를 설치해야 한다.
#yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

#java -version
openjdk version "1.8.0_345"
OpenJDK Runtime Environment (build 1.8.0_345-b01)
OpenJDK 64-Bit Server VM (build 25.345-b01, mixed mode)

#javac -version
javac 1.8.0_345

#vi Hello5.java
/*
파일명: Hello5.java
프로그램 설명: 자바 언어를 이용한 첫 번째 프로그램
작성자: 리눅스마스터넷
**/

class Hello5 {

public static void main(String[] args)
{
    System.out.println("Hello World!");
}

}

javac 명령어를 이용해서 소스코드를 컴파일을 한다.
#javac Hello5.java
#ll Hello5.class

javac로 컴파일된 class 파일을 java 명령어를 이용해서 실행한다.
이때 .class 확장자는 쓰지 않는다.
#java Hello5

Hello World!

profile
정보보안 전문가

0개의 댓글