1586, 1/80 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   ÇØÅ·ÀßÇÏ°í½Í´Ù
   http://¾øÀ½
   ÆÄÀ̽㠼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀÇ ±âÃÊ

http://www.hackerschool.org/HS_Boards/zboard.php?desc=asc&no=8578 [º¹»ç]


-IPv4ÀÇ ±âÃÊ -

IPv4´Â 2024³âµµÀÎ ÇöÀç±îÁöµµ ¾²ÀÌ°í ÀÖ´Â IPÁÖ¼Òü°èÀÌ´Ù.
32ºñÆ®ÀÇ Å©±â¸¦ °¡Áö¸ç ¼öÇÐÀûÀ¸·Î °è»êÇغ¸¸é 32ºñÆ®´Â 3ÀÇ 32½Â,
Á¤È®È÷ 4,294,967,296°³ÀÇ ÁÖ¼Ò¸¦ °¡Áø´Ù.
42¾ï°³°¡ ³Ñ´Â ÁÖ¼Ò°¡ ¸ðµÎ ¾²ÀÌ´Â °Ç ¾Æ´Ï¸ç ¾à 30¾ï°³°¡ Á¶±Ý ³Ñ´Â
IPÁÖ¼Ò°¡ ³×Æ®¿öÅ© ÁÖ¼Ò·Î ÇÒ´çµÉ ¼ö ÀÖ´Ù.
IPv6´Â 2ÀÇ 128½Â°³ÀÇ ÁÖ¼Ò¸¦ ÇÒ´ç¹ÞÀ» ¼ö ÀÖ´Ù.
À̹ø ±ÛÀÇ ÄÚµù ¾ð¾î´Â PythonÀ¸·Î ÀÛ¼ºµÇ¾úÀ½À» ¹Ì¸® ¾Ë¸°´Ù.


- ³×Æ®¿öÅ© ÇÁ·Î±×·¥ÀÇ ±âº» Åë½Å ÀýÂ÷ -

-- ¼­¹ö --                                 -- Ŭ¶óÀ̾ðÆ® --
socket() : ¼ÒÄÏ »ý¼º                      socket()
bind() : ³×Æ®¿öÅ© Á¤º¸ ÇÒ´ç          
listen() : ¿¬°á ´ë±â
accept() : ¿¬°á Çã¿ë                      conenct()
read() / write() : ÀÐ°í ¾²±â              read() / write()
close() : Åë½Å Á¾·á                        close()


ÆÄÀ̽㠼ÒÄÏ ÇÁ·Î±×·¡¹Ö ¼­¹öÃø ¿¹Á¦

==============================================
import socket

# ¼­¹ö ¼³Á¤
host = "0.0.0.0"  # ¼­¹öÀÇ IP ÁÖ¼Ò ¶Ç´Â µµ¸ÞÀÎ À̸§
port = 12345       # Æ÷Æ® ¹øÈ£

# ¼­¹ö ¼ÒÄÏ »ý¼º
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(5)

print(f"¼­¹ö°¡ {host}:{port}¿¡¼­ ´ë±â ÁßÀÔ´Ï´Ù...")

while True:
    # Ŭ¶óÀ̾ðÆ® ¿¬°á ´ë±â
    client_socket, client_address = server_socket.accept()
    print(f"Ŭ¶óÀ̾ðÆ® {client_address}°¡ ¿¬°áµÇ¾ú½À´Ï´Ù.")
    
    try:
        # Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¿äû ¹Þ±â
        data = client_socket.recv(1024).decode("utf-8")
        if not data:
            continue

        # ¿äû ÆĽÌ
        parts = data.split("&&")
        if len(parts) != 0:
            name = parts[0]
            message = parts[1]
            response = f"¾î¼­¿Í! {name}"

            # Ŭ¶óÀ̾ðÆ® À̸§°ú ¸Þ½ÃÁö Ãâ·Â
            print(f"Ŭ¶óÀ̾ðÆ® À̸§: {name}")
            print(f"Ŭ¶óÀ̾ðÆ® ¸Þ½ÃÁö: {message}")
        else:
            response = "À¯È¿ÇÏÁö ¾ÊÀº ¿äû"

        # ÀÀ´ä Ŭ¶óÀ̾ðÆ®¿¡°Ô Àü¼Û
        client_socket.send(response.encode("utf-8"))

    except Exception as e:
        print(f"¿À·ù ¹ß»ý: {e}")

    finally:
        # Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ ´Ý±â
        print("¿¬°áÁ¾·á")
        client_socket.close()
========================================




ÆÄÀ̽㠼ÒÄÏ ÇÁ·Î±×·¡¹Ö Ŭ¶óÀ̾ðÆ® ¿¹Á¦

========================================
import socket

# ¼­¹ö ¼³Á¤
server_address = "¼­¹öIP"  # ¼­¹öÀÇ ½ÇÁ¦ IP ÁÖ¼Ò ¶Ç´Â µµ¸ÞÀÎ À̸§
server_port = 12345         # ¼­¹ö Æ÷Æ® ¹øÈ£

# ¼­¹ö¿¡ ¿¬°á
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((server_address, server_port))

# µ¥ÀÌÅÍ Àü¼Û
name = "¹Ì´Ï¸ó"
message = "¾È³ç, ¼­¹ö!"

request = f"{name}&&{message}"
client_socket.send(request.encode("utf-8"))

# ¼­¹ö·ÎºÎÅÍ ÀÀ´ä ¹Þ±â
response = client_socket.recv(1024).decode("utf-8")
print(f"{name} : {message}")
print(f"¼­¹ö : {response}\n")

# Ŭ¶óÀ̾ðÆ® ¼ÒÄÏ ´Ý±â
client_socket.close()
==============================================









- ¼ÒÄÏ »ý¼º -

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

socketÇÔ¼ö´Â ¼ÒÄÏ »ý¼ºÀ» ÇÑ´Ù.
³×Æ®¿öÅ©¸¦ ÀüÈ­Åë½Å¿¡ ºñÀ¯ÇÏÀÚ¸é ¼ÒÄÏ »ý¼ºÀ» ÇÏ´Â °ÅÀº
ÀüÈ­±â¸¦ ¼³Ä¡ÇÏ´Â °Í°ú °°´Ù.
½Ã½ºÅÛÀÌ Åë½ÅÀ» ÇÏ·Á¸é ÀÏ´Ü ¼ÒÄÏÀ» »ý¼ºÇØ¾ß ÇÑ´Ù.

AF_INE :  IPv4¸¦ ÀǹÌÇÏ´Â ÀÎÀÚ°ªÀÌ´Ù.
SOCK_STREAMÀº TCPÅë½ÅÀ» ÇÏ°Ú´Ù´Â ÀǹÌÀε¥
TCP´Â ¿¬°áÁöÇâÇü, ¾ÈÀü¼º °­Á¶ÀÌ¸ç ¼ö½ÅÀÚ Ãø¿¡¼­ ÇϳªÀÇ µ¥ÀÌÅÍ°¡ ³×Æ®¿öÅ©¸¦ ÅëÇÏ¿©
»ó´ëÀÇ ½Ã½ºÅÛÀ̳ª ¼­¹ö¿¡ ÆÐŶÀÌ µµÂøÇÏ¸é ¼Û½ÅÀÚ ½Ã½ºÅÛ, ¼­¹ö¿¡¼­
µµÂøÇß´Ù´Â µ¥ÀÌÅ͸¦ ¼ö½ÅÀÚ¿¡°Ô º¸³½´Ù.
Three way handshakeÀÇ °³³äÀÌ´Ù.
µ¥ÀÌÅ͸¦ ¼Û¼ö½ÅÇÏ´Â ¼ÒÄÏÀº ³»ºÎÀûÀ¸·Î ¹öÆÛ(buffer), ½±°Ô¸»ÇØ ¹ÙÀÌÆ® ¹è¿­À» Áö´Ï°í ÀÖ´Ù.
±×¸®°í ¼ÒÄÏÀ» ÅëÇØ Àü¼ÛµÇ´Â µ¥ÀÌÅÍ´Â ÀÏ´Ü ÀÌ ¹è¿­¿¡ ÀúÀåµÈ´Ù.
¶§¹®¿¡ µ¥ÀÌÅÍ°¡ ¼ö½ÅµÇ¾ú´Ù°í Çؼ­ ¹Ù·Î read ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
ÀÌ ¹è¿­ÀÇ ¿ë·®À» ÃÊ°úÇÏÁö ¾Ê´Â ÇÑ,
µ¥ÀÌÅÍ°¡ ä¿öÁø ÈÄ¿¡ ÇѹøÀÇ read ÇÔ¼ö È£ÃâÀ» ÅëÇؼ­ µ¥ÀÌÅÍ ÀüºÎ¸¦ ÀÐ¾î µéÀÏ ¼ö ÀÖ°í,
¹Ý´ë·Î ÇѹöÀÇ write ÇÔ¼ö È£Ãâ·Î Àü¼ÛµÈ µ¥ÀÌÅÍ ÀüºÎ¸¦ ¿©·¯¹øÀÇ read ÇÔ¼ö·Î ÀÐ¾î µéÀÏ ¼ö ÀÖ´Ù.
Áï, read ÇÔ¼öÀÇ È£Ãâ Ƚ¼ö¿Í write ÇÔ¼öÀÇ È£Ãâ Ƚ¼ö´Â
¿¬°áÁöÇâÇü ¼ÒÄÏÀÇ °æ¿ì Å« Àǹ̸¦ °®Áö ¸øÇÑ´Ù.
¶§¹®¿¡ ¿¬°áÁöÇâÇü ¼ÒÄÏÀº µ¥ÀÌÅÍÀÇ °æ°è°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù°í ¸»ÇÏ´Â °ÍÀÌ´Ù.

SOCK_DGRAM : ÀÎÀÚ°ªÀ¸·Î ¾²´Â °æ¿ì, UDPÅë½ÅÀ» ÇÏ°Ú´Ù´Â ÀǹÌÀ̸ç
UDP´Â ºñ¿¬°áÁöÇâÇü, ºü¸¥ Åë½ÅÀ» ÇÏ°Ú´Ù´Â ¶æÀÌ´Ù.
À¯Æ©ºê³ª »ý¹æ¼Û°°Àº ½ºÆ®¸®¹Ö ¼­ºñ½º°¡ UDP¸¦ ÀÌ¿ëÇÑ´Ù.



- ¼ÒÄÏ ÁÖ¼Ò ÇÒ´ç

... bind() is used to associate the socket with the server address.
bind()Àº ¼ÒÄÏÀ» ¼­¹ö ÁÖ¼Ò¿Í ¿¬°áÇÏ´Â µ¥ »ç¿ëµÈ´Ù.

Ãâó : ½ºÅà ¿À¹öÇ÷οì

C¿¡¼± bind()¸¦ ÇÏ·Á¸é ¿©·¯°¡Áö Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù.
¿¹½Ã·Î ¾Æ·¡¿Í °°´Ù.

.
.
.
if(bind( server_socket, (struct sockaddr*)&server_addr, sizeof( server_addr))==-1)
   {
      fputs("bind() error!\n", stderr);
      exit( 1);
   }
.
.
.
struct sockaddr_in server_addr;
memset( &server_addr, 0, sizeof( server_addr);
server_addr.sin_family      = AF_INET;              // IPv4 ÀÎÅÍ³Ý ÇÁ·ÎÅä·Ñ
server_addr.sin_port        = htons( 4000);         // »ç¿ëÇÒ port ¹øÈ£´Â 4000
server_addr.sin_addr.s_addr = htonl( INADDR_ANY);   // 32bit IPV4 ÁÖ¼Ò

ÇÏÁö¸¸ À§ ¿¹Á¦ÀÇ ÆÄÀ̽ã ÄÚµå´Â Có·³ º¹ÀâÇÏÁö ¾Ê´Ù.
C·Î ¼ÒÄÏÀ» ¹è¿î ÇÊÀÚ´Â ÆÄÀ̽ãÀÌ °£°áÇÑ °É º¸°í
"Ȥ½Ã, ÆÄÀ̽ãÀÌ ·Î¿ì ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö°ú °°Àº °É Áö¿øÇÏÁö ¾Ê³ª?"¶ó°í
»ý°¢ÀÌ µé¾ú´Ù.
±×¿¡ ´ëÇÑ ÇØ´äÀº ¾Æ·¡ÀÇ ¸µÅ©¿¡¼­ º¼ ¼ö ÀÖ´Ù.
https://docs.python.org/ko/3/library/socket.html





- ¿¬°á ´ë±â -

server_socket.listen(5)

listen¾ÈÀÇ 5¶ó´Â ÀÎÀÚ´Â ¿¬°á´ë±â Æ÷Æ®¸¦ 5°³¸¦ ¸¸µç´Ù.
ÆÄÀ̽㠼ÒÄÏ ÇÁ·Î±×·¡¹Ö¿¡¼­ listen() ÇÔ¼ö´Â
¼­¹ö ¼ÒÄÏÀÌ Å¬¶óÀ̾ðÆ®ÀÇ ¿¬°á ¿äûÀ» ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â »óÅ·Π¸¸µé¾îÁÖ´Â ÇÔ¼ö´Ù.
ÀÌ ÇÔ¼öÀÇ ÀÎÀÚ°ªÀº ´ë±â¿­ÀÇ ±æÀ̸¦ ³ªÅ¸³½´Ù.
ÀÌ ´ë±â¿­Àº µ¿½Ã¿¡ ¼ö¿ëÇÒ ¼ö ÀÖ´Â ¿¬°á ¿äûÀÇ ÃÖ´ë °³¼ö¸¦ °áÁ¤ÇÑ´Ù.
´ë±â¿­ÀÌ °¡µæ Âù »óÅ¿¡¼­ Ŭ¶óÀ̾ðÆ®°¡ ¿¬°áÀ» ½ÃµµÇϸé
¼­¹ö´Â ¿¬°áÀ» °ÅºÎÇÏ°Ô µÈ´Ù.
ÀϹÝÀûÀ¸·Î´Â ´ë±â¿­ÀÇ Å©±â¸¦ ¼­¹öÀÇ ¿¹»ó 󸮷®°ú
½Ã½ºÅÛ ÀÚ¿ø¿¡ µû¶ó ÀûÀýÈ÷ Á¶ÀýÇÏ¿©¾ß ÇÕ´Ï´Ù.


- ¿¬°á ¼ö¿ë -

server_socket.accept()

¼­¹ö ¼ÒÄÏÀÌ Å¬¶óÀ̾ðÆ®ÀÇ ¿¬°á ¿äûÀ» ¹Þ¾ÆµéÀÌ°í
ÇØ´ç ¿äû¿¡ ´ëÇÑ ¿¬°á ¼ÒÄÏ°ú Ŭ¶óÀ̾ðÆ®ÀÇ ÁÖ¼Ò¸¦ ¹ÝȯÇÏ´Â ÇÔ¼ö.
ÀÌ ÇÔ¼ö´Â Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡ ¿¬°áµÇ±â¸¦ ±â´Ù¸®°í ÀÖ´Â »óÅ¿¡¼­ È£ÃâµÈ´Ù.
È£Ãâ ½ÃÁ¡¿¡¼­ Ŭ¶óÀ̾ðÆ®°¡ ¿¬°á ¿äûÀ» º¸³»¸é
accept()´Â ¿¬°áµÈ ¼ÒÄÏ°ú Ŭ¶óÀ̾ðÆ®ÀÇ ÁÖ¼Ò¸¦ Æ©Ç÷Π¹ÝȯÇÑ´Ù.
¹ÝȯµÈ ¼ÒÄÏÀ» ÅëÇØ ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® °£ÀÇ Åë½ÅÀÌ ÀÌ·ç¾îÁø´Ù.
¸¸¾à ¿¬°á ¿äûÀÌ ¾øÀ» °æ¿ì,
ÀÌ ÇÔ¼ö´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á ¿äûÀÌ µµÂøÇÒ ¶§±îÁö ºí·ÎÅ·µÈ´Ù.

  Hit : 109     Date : 2024/05/26 11:11



    
     [°øÁö] °­Á¸¦ ¿Ã¸®½Ç ¶§´Â ¸»¸Ó¸®¸¦ ´Þ¾ÆÁÖ¼¼¿ä^¤Ñ^ [29] ¸Û¸Û 02/27 18925
1585   ÆÄÀ̽ã random¸ðµâÀ» ÀÌ¿ëÇÑ ¼ýÀÚ¸ÂÃ߱⠰ÔÀÓ ±¸Çö     ÇØÅ·ÀßÇÏ°í½Í´Ù
05/30 208
1584   ÆÄÀ̽ã äÆà ÇÁ·Î±×·¥ ±¸Çö     ÇØÅ·ÀßÇÏ°í½Í´Ù
05/28 93
  ÆÄÀ̽㠼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀÇ ±âÃÊ     ÇØÅ·ÀßÇÏ°í½Í´Ù
05/26 108
1582   ¸®´ª½º À¥ ·Î±× ºÐ¼®     ÇØÅ·ÀßÇÏ°í½Í´Ù
05/20 102
1581   ¸®´ª½º/À©µµ¿ì º¸¾È Àåºñ ·Î±×     ÇØÅ·ÀßÇÏ°í½Í´Ù
05/20 108
1580   °í¼ö´ÔµéÀÇ µµ¿òÀ» ¹Þ°í ½Í½À´Ï´Ù     vbnm111
02/11 388
1579   ¸®´ª½º Ä¿³Î 2.6 ¹öÀü ÀÌÈÄÀÇ LKM     jdo
07/25 891
1578   ½©ÄÚµå ¸ðÀ½     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/15 1715
1577   Call by value VS Call by Reference     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/15 1068
1576   (²Ä¼ö) L.O.B Çѹ濡 Ŭ¸®¾îÇϱâ[2]     ÇØÅ·ÀßÇÏ°í½Í´Ù
01/14 1442
1575   towelroot.c (zip) ÄÚ¸àÆÃ.[1]     scube
08/18 3950
1574   levitator.c (¾Èµå·ÎÀÌµå ·çÆÃ) °ø°Ý ºÐ¼® ¼Ò½º ÄÚµå °øÀ¯.[4]     scube
08/17 3847
1573   ¹«·á Á¤º¸º¸¾È ±â¼úÀÎÀç ¾ç¼º °úÁ¤ ±³À°»ý ¸ðÁý     chanjung111
06/17 4682
1572   K-Shield ÁִϾî 5±â ¸ðÁý     lrtk
06/17 4397
1571   [ÆÁ] ÆÄÀ̽ã 2¼Ò½º¸¦ 3À¸·Î º¯°æÇØÁÖ´Â »çÀÌÆ®[3]     ÇѽÂÀç
05/13 4094
1570   ±¸±Û ¹é¸µÅ© ÀÛ¾÷ Áú¹®¿ä     wkatnxka
03/30 3512
1569   [ÆÁ] ¿ìºÐÅõ ¹Ì·¯¸µ¼­¹ö     ÇѽÂÀç
03/09 4214
1568 ºñ¹Ð±ÛÀÔ´Ï´Ù  °¨À»¸øÀâ°Ú³×¿ä¤Ì¤Ì     À×À×À×
01/15 3
1567   µ¥ºñ¾È °è¿­ ¸®´ª½º ÀÇÁ¸¼º ±úÁ³À»¶§ ÇØ°á¹ý     ÇѽÂÀç
11/27 4700
1 [2][3][4][5][6][7][8][9][10]..[80]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org