linux发送tcp/udp请求

2023-05-16

本文章介绍下通过nc工具、iperf工具和python脚本,实现发送tcp/udp请求

一、nc工具(netcat工具)

这个工具linux系统默认是自带的,以下是命令的常用参数

1.1 发送tcp请求

服务端监听端口nc -l port

客户端连接并发送请求nc -v host port

服务端收到了信息

当服务端端口未监听时,连接会报错

上面的监听方式,当从客户端或服务端退出连接时,另一端也会自动退出

如果想服务端一直监听,则需要加上-k参数

如果想将服务置于后端运行,则可通过setisid,&,nohup命令,如setsid nc -lk 8888

1.2发送udp请求

服务端监听端口nc -ul port

客户端连接并发送请求nc -uv host port

服务端收到消息

tpc是面向连接的,而udp是无连接的。所以当服务器端端口未监听时,连接也不会报错

二、iperf工具

iperf是一个网络性能测试工具,可以测试tcp/udp带宽质量等

首先要安装iperf

brew install iperf
或者
yum install iperf

常用参数:iperf --help可查看详细参数

-c/s:客户端模式/服务端模式

-p:指定iperf测试端口

-i:指定报告间隔

-u:使用udp方式

-b:设置UDP的发送带宽,单位bit/s

-t:设置测试的时长,单位为秒,不设置默认10s

-l:指定包大小,TCP默认8k,UDP默认1470字节

2.1 tcp通信

iperf -s -i 1 -p 12306
iperf -c 43.138.0.250 -p 12306 -i 1

2.2 udp通信

iperf -u -s -i 1 -p 12306
iperf -u -c 43.138.0.250 -p 12306 -i 1

三、python脚本

使用python2运行

3.1 tcp服务端脚本

# -*- coding: utf-8 -*-
# 一个简单的tcp服务器
import sys
from SocketServer import BaseRequestHandler, ThreadingTCPServer
from datetime import datetime

reload(sys)
sys.setdefaultencoding('utf8')


class EchoHandler(BaseRequestHandler):
    def handle(self):
        print('%s : Got connection from %s' % (datetime.now(), self.client_address))
        while True:
            try:
                msg = self.request.recv(8192)
                print('msg:%s' % msg)
                if not msg:
                    break
                self.request.send('receive: ' + msg)
            except Exception as e:
                pass


if __name__ == '__main__':
    serv = ThreadingTCPServer(('', 8888), EchoHandler)  # 8888为要监听的端口
    serv.serve_forever()

3.2 udp服务端脚本

# -*- coding: utf-8 -*-
# 一个简单的udp服务器
from socket import *

serverSocket = socket(AF_INET, SOCK_DGRAM)

serverSocket.bind(('', 12307))  # 12307为要监听的端口号

while True:
    msg, address = serverSocket.recvfrom(1024)
    print(msg)
    message = 'receive: ' + msg
    serverSocket.sendto(message, address)

3.3 客户端脚本

# -*- coding: utf-8 -*-
# 客户端脚本
import socket
import time
import datetime

out_data = "test test test test"  # 客户端发送内容
count = 10 # 发送数据次数 


def loop_func(l4_type, l4_host, l4_port, second):
    socket_type = {"tcp": socket.SOCK_STREAM, "udp": socket.SOCK_DGRAM}
    s = socket.socket(socket.AF_INET, socket_type.get(l4_type))
    s.connect((l4_host, l4_port))
    loop = 0
    while True:
        cur_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        print(cur_time)
        print('send: ' + out_data)
        s.send(out_data.encode())
        in_data = s.recv(1024)
        if len(in_data) == 0:
            s.close()
            print('server closed connection.')
        print(in_data)

        time.sleep(second)
        loop += 1
        if loop == count:
            print("time out, over")
            break


if __name__ == "__main__":
    host = 'localhost'  # host
    port = 12307  # port
    #loop_func("tcp", host, port, 1)  # tcp
    loop_func("udp", host, port, 1)  # udp每1秒发一次数据

服务端输出结果:

客户端输出结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux发送tcp/udp请求 的相关文章

  • 使用 TcpClient 通过 C# 通过 TCP 发送多个文件

    我正在尝试使用 C TcpClient 通过 TCP 发送多个文件 对于单个文件来说它效果很好 但是当我有多个文件时 它只发送第一个文件 这是我的代码 发送文件 try TcpClient tcpClient new TcpClient N
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • Linux中如何避免sleep调用因信号而中断?

    我在 Linux 中使用实时信号来通知串行端口中新数据的到达 不幸的是 这会导致睡眠呼叫在有信号时被中断 有人知道避免这种行为的方法吗 我尝试使用常规信号 SIGUSR1 但我不断得到相同的行为 来自 nanosleep 联机帮助页 nan
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 在 scapy 中通过物理环回发送数据包

    我最近发现了 Scapy 它看起来很棒 我正在尝试查看 NIC 上物理环回模块 存根上的简单流量 但是 Scapy sniff 没有给出任何结果 我正在做的发送数据包是 payload data 10 snf sniff filter ic
  • 无法从 run 方法中访问对象的属性(方法)! Java多线程

    我在 ServerConnectionManager 中有以下代码 public class ServerConnectionManager implements Runnable private DatagramPacket receiv
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 从 Docker 容器发送多播数据包(到多播组)

    我有一个通过 UDP 多播发送消息的应用程序 我一直试图将其放在 docker 下 我在尝试从 Docker 容器发送多播数据包时遇到了很大的阻力 我已经能够通过 net host运行 docker 容器的选项 然而 我想坚持使用桥接配置
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 使用套接字和 AsyncTask 强制关闭

    堆栈的人们大家好 请参阅下面我的班级代码和我的 LogCat 尝试连接时我受到强力关闭 如果有人能帮助我找出原因 我将不胜感激 基本上代码的作用是 从意图中获取 IP 地址 连接到端口 32 的 IP 然后发送一个命令 等待响应并发送另一个
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终

随机推荐