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请求 的相关文章

  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • NPTL 和 POSIX 线程有什么区别?

    NPTL 和 POSIX 线程之间的基本区别是什么 这两者是如何演变的 POSIX 线程 pthread 不是一个实现 它是几个函数的 API 规范 纸上的标准 英文 其名称以pthread 以及定义在
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • ADO.NET SQLServer:如何防止关闭的连接持有S-DB锁?

    i Dispose http msdn microsoft com en us library system data sqlclient sqlconnection close aspx一个 SqlConnection 对象 但是当然它并
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • 如何抑制Windows防火墙的Windows安全警报?

    当我从这里找到的 ZeroMQ 指南中用 C 创建 Hello World 示例时 http zguide zeromq org page all Ask and Ye Shall Receive http zguide zeromq or
  • 我不明白 execlp() 在 Linux 中如何工作

    过去两天我一直在试图理解execlp 系统调用 但我还在这里 让我直奔主题 The man pageexeclp 将系统调用声明为int execlp const char file const char arg 与描述 execl exe
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • PyQt5 - 无法使用 QVideoWidget 播放视频

    from PyQt5 QtWidgets import from PyQt5 QtMultimedia import from PyQt5 QtMultimediaWidgets import from PyQt5 QtCore impor

随机推荐