호스트OS는 기본으로 .1번 주소를 가지고 있다.
IPv4 자동으로 IP주소 받기 설정 시 DHCP 서버에서 IP를 자동 설정한다.
윈도우 네트워크
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!