网络编程实验1udp实现CS和端口号

Posted osea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程实验1udp实现CS和端口号相关的知识,希望对你有一定的参考价值。

"""
(1)UDP C/S结构通信:
?服务器端和客户端IP:当前主机IP(192.168.?.?)

?服务器监听端口:服务器启动时默认侦听端口为1060,当客户端有udp数据传过来时,
可以对数据进行解码(utf-8)并打印出客户端传输的字符串数据,
同时给发送数据的客户端传输字符串数据“你好,我是服务器+(ip,port),有事情可以随时联系我!”

?客户端端口:系统随机选定。
要求客户端启动后给服务器发送一个字符串数据“服务器你好,我是客户端+(ip,port)”,
发送完数据后客户端便处于等待服务器端使用udp协议回复信息状态,接收到回复信息后,在屏幕上输出解码后的数据。
"""

import argparse, socket, time
from datetime import datetime

MAX_BYTES = 65535

def server(port):
    #创建udp对象
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #绑定ip地址+端口号
    sock.bind((127.0.0.1, port))
    #加入提示词
    print(Listening at {}.format(sock.getsockname()))

    while True:
        data, address = sock.recvfrom(MAX_BYTES)
        text = data.decode(utf-8)
        print(The client at {} says {!r}.format(address, text))
        text = Your data was {} bytes long.format(len(data))
        data = text.encode(ascii)
        time.sleep(30)
        sock.sendto(data, address)

def client(port):
    #创建udp对象
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #text为当前时间
    text = The time is {}.format(datetime.now())
    data = text.encode(ascii)

    sock.sendto(data, (127.0.0.1, port))
    print(The OS assigned me the address {}.format(sock.getsockname()))
    data, address = sock.recvfrom(MAX_BYTES)
    text = data.decode(ascii)
    print(The server {} replied {!r}.format(address, text))

if __name__ == __main__:
    choices = {client: client, server: server}
    parser = argparse.ArgumentParser(description=Send and receive UDP locally)
    parser.add_argument(role, choices=choices, help=which role to play)
    parser.add_argument(-p, metavar=PORT, type=int, default=1060,
                        help=UDP port (default 1060))
    args = parser.parse_args()
    function = choices[args.role]
    function(args.p)

 

 

 

 

 

技术图片
"""
扫描主机端口状态
建立程序能够对本机的常用端口状态进行检测,并将扫描到的活动端口信息写入到scanResult.txt文件中
常用的端口列表portLs=[21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015]

"""

import socket

def main():
    ip_start = input(请输入开始IP:(默认:127.0.0.1))
    
    #若无输入则以127.0.0.1
    if ip_start == ‘‘:
        ip_start = 127.0.0.1
        ip_end = 127.0.0.1
    #否则还要输入结束IP
    else:
        ip_end = input(请输入结束IP:)
        if ip_end == ‘‘:
            ip_end = 127.0.0.1

    s = input(请输入目标主机开始端口:(默认扫描常用端口))
    if s == ‘‘:
        portList = [21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015]
    else:
        startport = int(s)
        s = input(请输入目标主机结束端口:(默认:65535))
        if s == ‘‘:
            endport = 65535
        else:
            endport = int(s)
        portList = [i for i in range(startport, endport + 1)]  # 思考:这里为什么要+1?

    while True:
        # ip_start<ip_end 
        x1 = ip_start.rfind(.);  # x1存放起始ip的最后一位,i.e., 127.0.0.1
        x2 = ip_end.rfind(.)  # x2存放终止ip的最后一位
        if int(ip_start[x1 + 1:]) > int(ip_end[x2 + 1:]):  # 判断起始ip的最后一位是否大于终止ip的最后一位,假定在一个C类网段内
            break;

            # 开始扫描端口 
        for port in portList:
            print(正在扫描%s :%d % (ip_start, port))
            try:
                sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                sk.settimeout(10)
                sk.connect((ip_start, port))
                sk.settimeout(None)
                print(Server %s port %d OK! % (ip_start, port))
                sk.close()
                # 结果保存在文件中 
                f = open("IP_Port.txt", a)
                f.write(ip_start +  :  + str(port) + 
)
                f.close()
            except Exception:
                print(Server %s port %d is not connected! % (ip_start, port))

                # 更新ip_start,ip_start增1
        i = ip_start.rfind(.)
        x = int(ip_start[i + 1:]) + 1
        ip_start = ip_start[:i + 1] + str(x)


if __name__ == __main__:
    main()
    print(扫描完成,结果保存在IP_Port.txt文件中) 
View Code

 

以上是关于网络编程实验1udp实现CS和端口号的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE基础十---<网络编程>网络编程概述||通讯要素:IP和端口号,网络通信协议||关于InetAddress类||实现TCP通信||实现UDP通信

网络编程之端口和端口号的介绍

网络编程 ———— 网络基础知识(IP地址和端口号)

Java网络编程:IP地址和端口号

Java实现FTP客户端,获得IP和端口号的问题

UDP网络编程