码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-04-19 13:06:57      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:字符串   display   event   desc   lis   des   port   检测   ndt   

"""
(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) + \n)
                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

 

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

标签:字符串   display   event   desc   lis   des   port   检测   ndt   

原文地址:https://www.cnblogs.com/Osea/p/12730867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!