Socket 통신으로 FTP로 파일을 송수신 하려면 멀티 스레드를 이용해야 구현할 수 있지만, 굳이 어렵게 할 필요가 없다. 파이썬에서 기본적으로 제공하는 라이브러리중 ftplib 를 사용하면 포트를 열어주지 않아도 파일 송수신이 가능. PC환경 : Virtual Machine windows IE8 FTP서버: FTP Utility (Version 1.00) 1. FTP 연결 - 최우선적으로 ftplib를 import하고 접속할 FTP서버에 객체를 생성 - host 매개변수로 접속할 FTP서버 지정가능. - connect() 메소드로 연결할 호스트와 포트를 지정 가능 - connect() 메소드는 FTP연결이 성공하면 자동으로 배너를 출력해줌. 2. FTP 배너 출력 - getwelcome() 메소드를 ..
소스코드 코드설명 FTP서버를 열어준 호스트는 가상운영체제의 IE환경 (1) s.send(f"USER {user}".encode()) -wireshark에서도 확인가능하지만, FTP에서 명령을 처리할 때, 맨앞에 명령어의 대문자로 처리함 (2) 530 과 230의 의미: FTP서버로부터의 응답값: -서버에 접근시 220번과 배너 반환 -로그인 성공 시 230번 -로그인 실패 시 530번 -Can't Build Data Connection을 만나면 접속하는 클라이언트나 서버의 port가 방화벽에 의해 차단 당하고 있을 가능성이 높음. 따라서 데이터 전송시 포트를 열어주어야함 (3)s.send(f"PORT {conf_ip},25,25".encode()) -425번 에러를 접했을때 포트를 열어줘야하는 코드. ..
Client 코드 주요함수: -s.connect(addr) -listen하고 있는 서버에게 연결(서버 측 소스가 먼저 실행되고있어야함) -s.send(s_data.encode()) -input으로 받아온 문자열을 인코딩해서 보냄. Server 코드 주요함수: -s.bind(addr) -소켓에 ip주소와 4444포트번호를 결합한 것을 바인딩 -s.listen() -소켓에 연결되기를 기다림 -s.accept() -연결이되면, conn과 addr를 반환. -연결이 된 이후, 데이터를 보내야할대 conn을 사용해야 함 -conn.recv(1024).decode() -연결된곳으로부터 1024바이트만큼의 데이터를 받아옴. -2진데이터이기 때문에, decode를 해서 갖고와야함 결과 왼쪽이 클라이언트코드 오른쪽이 서..
Version: IPv4, IPv6을 나타낸다. 현재까진 거의 IPv4를 사용한다. IHL(IP Header Length): IP헤더의 길이를 워드 단위로 나타낸다. TOS(Type Of Service): 서비스의 우선순위를 제공하도록 라우터에 요구한다. Total Length: 헤더의 총 길이를 바이트 단위로 나타낸다. Identification: 패킷의 분할 시 다시 결합하는 고윳값을 나타낸다. 분할된 패킷 쌍끼리 같은 값을 가진다. IP Flags: 첫 번째 비트는 0으로 사용되지 않는다. 두번째 필드는 Do Not Fragment이며 값이 1인 경우 분할하지 않는다. 세번째 More Fragment 필드는 분할된 패킷 쌍에서 마지막 패킷이 아니라면 1이다. Fragment Offset: 원본 데이..
6~9: 운영체제종류의 이름이 nt 즉, 윈도우면 소켓에 사용하는 프로토콜을 IP로 설정 11: 첫번째 인자는 IPv4 주소형식으로 AF_INET을 사용하겠다는 것을 의미한다. 두번째 인자는 RAW소켓을 이용하겠다는것을 의미. TCP면 SOCK_STREAM, UDP면 SOCK_DGRAM을 사용한다. 12: bind함수를 통해 호스트의 ip주소와 포트를 연결 0을 설정하면 포트번호를 자동으로 설정해줌. 15: 소켓에 옵션을 더하는 함수. 첫 번째 인자는 대상 소켓, 두번째 인자는 옵션, 세번째는 옵션의 설정값이 들어감. IPPROTO_IP를 대상으로 IP헤더를 포함하는 옵션인 IP_HDRINCL을 참으로 설정하였고, IP헤더또한 조작가능. 18~19: 윈도우에 필요한 무차별모드(Promiscous mode..