惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
P
Privacy International News Feed
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Attack and Defense Labs
Attack and Defense Labs
NISL@THU
NISL@THU
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
GbyAI
GbyAI
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Y
Y Combinator Blog
C
CERT Recently Published Vulnerability Notes
N
Netflix TechBlog - Medium
S
Security Affairs
Spread Privacy
Spread Privacy
罗磊的独立博客
腾讯CDC
MyScale Blog
MyScale Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
L
LINUX DO - 热门话题
The Cloudflare Blog
L
LangChain Blog
博客园_首页
H
Hacker News: Front Page
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
SecWiki News
SecWiki News
A
Arctic Wolf
爱范儿
爱范儿
Google Online Security Blog
Google Online Security Blog
T
Threat Research - Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
有赞技术团队
有赞技术团队
The GitHub Blog
The GitHub Blog
Cyberwarzone
Cyberwarzone
博客园 - 叶小钗
V
Visual Studio Blog
V
V2EX
T
Tailwind CSS Blog
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
MongoDB | Blog
MongoDB | Blog
D
Docker

蛮荆

如何获取更多的免费服务器 Kubernetes 调度器队列 - 设计与实现 Kubernetes 调度器 - 核心流程 Kubernetes Networking Model & CNI Kubernetes 控制器管理总结 Kubernetes CronJob 设计与实现 Kubernetes Job 设计与实现 Kubernetes HPA 设计与实现 Kubernetes Deployment 滚动更新实现原理 Kubernetes GC 设计与实现 Kubernetes Pod 驱逐 - 设计与实现 Kubernetes Daemonset 设计与实现 Kubernetes ReplicaSet 设计与实现 Kubernetes EndPoint 设计与实现 Kubernetes Informer 设计与实现 降本增效之应用优化 (三) 日志存储与检索 Kubernetes Pod 设计与实现 - 创建流程 Kubernetes 探针设计与实现 Unix 编程艺术名句摘录 Kubernetes - CRI 概述 Golang 编译速度为什么这么快? Kubernetes Pod 设计与实现 - Pause 容器 Kubernetes - kube-proxy 代理模式工程优化 Kubernetes 应用最佳实践 - 优雅关闭长连接 Kubernetes Service 类型和会话亲和性 Kubernetes 为什么需要 Ingress Kubernetes 架构 - 控制平面和数据平面 降本增效之应用优化 (二) 大报表 Go 语言如何获取 CPU 利用率 降本增效之应用优化 (一) Redis 业务规则引擎演变过程简述 微服务中的熔断算法 漏桶算法和令牌桶算法 jsonparser 为什么比标准库的 encoding/json 快 10 倍 ? zap 高性能设计与实现 HTTP Router 算法演进 fastcache 高性能设计与实现 Web 常见的三个安全问题 ants Code Reading Go 线程安全 map 方案选型 布隆过滤器 死锁、活锁、饥饿、自旋锁 sync.Pool Code Reading Go 内存管理概述 Go netpoll Code Reading goroutine 泄漏与检测 time/Timer Code Reading GMP Scheduler Code Reading Go channel 的 15 条规则和底层实现 为什么 Linux “一切皆文件” context.Context Code Reading runtime/HACKING.md Goland 最佳实践 互联网开发与金庸武学 为什么 Redis 6.0 引入多线程模型? Kubernetes 应用最佳实践 - 金丝雀发布 容器中如何正确配置 GOMAXPROCS ? singleflight Code Reading sync.Map Code Reading sync.Cond Code Reading sync.WaitGroup Code Reading sync.RWMutex Code Reading sync.Mutex Code Reading sync.Once Code Reading Go 无锁编程 sync/atomic Code Reading goroutine 交替打印奇偶数 GODEBUG Go 并发模式 Go 汇编 UUID 通用技术选型 Kubernetes 应用最佳实践 - 水平自动伸缩 Go 高性能 Tips fasthttp 为什么比标准库 net/http 快 10 倍 ? 技术文章配图指南 ChatGPT 初体验 Docker 网络原理概览 iptables 的五表五链 Kubernetes 应用最佳实践 - 亲和性和污点容忍度 Go 的反射与三大定律 Docker 官方提供的最佳实践 Go 语言内置的设计模式 HTTP1 到 HTTP3 的工程优化 Kubernetes 应用最佳实践 - Sidecar 模式 Kubernetes 应用最佳实践 - init 容器和钩子函数 为什么 recover 必须在 defer 中调用? 为什么 defer 的执行顺序和注册顺序不同? Go map 设计与实现 Go 切片扩容底层实现 Go 语言中的零拷贝 Go Delve 云原生和边缘计算简介 Kubernetes Pod 服务质量等级 Kubernetes 应用最佳实践 - 探针 Kubernetes 应用最佳实践 - 资源请求和限制 CDN 原理 Kubernetes 应用最佳实践 - 开篇 缓存策略和模式 Go 内存模型 Kubernetes 核心概念
nc 命令常用操作
2017-01-18 · via 蛮荆

2017-01-18 计算机网络 Linux 命令

nc 命令作用

nc 命令 (Netcat 的简称) 是一个强大的网络工具,可以在网络连接上面读取和写入数据,因为支持多种功能,如端口扫描、文件传输、端口监听、以及网络调试等,所以被称为 “网络瑞士军刀”。

nc 命令参数中的目标地址可以是域名,也可以是 IP 地址。


基本用法

1. 建立连接测试

可以用于测试本地到目标地址的连通性 (TCP/UDP)。

# nc IP 地址 端口号
$ nc 127.0.0.1 8080

# 没有异常提示,说明连接建立成功

# 使用 lsof 命令查看建立的连接
$ lsof -i:8080

# 输出如下
COMMAND     PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nc        77161     dbwu.tech    3u  IPv4 0xab5a955319abcdef      0t0  TCP localhost:63984->localhost:bmc_patroldb (ESTABLISHED)

除了使用 IP 地址之外,也可以直接使用域名。

2. 端口扫描

扫描主机上的开放端口,可以指定某一个,也可以端口范围:

$ nc -zv dbwu.tech 80

Connection to dbwu.tech port 80 [tcp/http] succeeded!

$ nc -zv dbwu.tech 443

Connection to dbwu.tech port 443 [tcp/https] succeeded!

# 如果指定端口号没有开放,命令输出会阻塞
$ nc -zv dbwu.tech 12345

# 阻塞等待输出
... 

# 指定范围端口号
$ nc -zv dbwu.tech 80-443

3. 创建简易聊天

创建一个简单的聊天服务端和客户端,用于本地网络编程调试程序。

服务端监听 12345 端口

$ nc -l 12345

# 查看端口是否已监听
$ lsof -i:12345

COMMAND  PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nc      3772     dbwu.tech    3u  IPv4      0x123456      0t0  TCP *:italk (LISTEN)

客户端连接服务端

$ nc 127.0.0.1 12345

# 连接之后,发送消息
hello server # 然后按回车

查看服务端数据

# 服务端显示数据
hello server

# 同时给客户端发送一个响应
hello client

# 返回到客户端,显示数据
hello client

4. 发送 UDP 数据

向指定

$ echo "Hello, UDP" | nc -u 172.67.147.110 53

5. 指定源 IP 地址和源端口

-s 指定源 IP 地址 -p 指定源端口号

主要针对多网卡的主机。

$ nc -s 192.168.1.100 -p 5678 172.67.147.110 8080

看到指定源 IP 地址,你也许会想到通过伪造 IP 来实现网络攻击?

但是这是不可行的,因为网络协议栈不允许通过未分配给本机的 IP 作为源 IP 地址,也就是说,即使在命令中伪造了一个源 IP 地址,数据包根本发不出去,因为协议栈无法找到相应的接口来发送数据,最后会返回错误。

# 伪造的源 IP 地址,直接操作失败
$ nc -s 1.1.1.1 -p 5678 172.67.147.110 8080

# 报错输出如下
nc: bind failed: Cannot assign requested address

6. 进行带宽测试

通过管道将数据传输到 nc 命令,可以进行本地到目标地址带宽测试。

# 向 dbwu.tech 发送 100 MB 数据进行带宽测试
$ dd if=/dev/zero bs=1M count=100 | nc dbwu.tech 443

# 输出如下

HTTP/1.1 400 Bad Request
Server: cloudflare
Date: Fri, 28 Jun 2024 08:53:22 GMT
Content-Type: text/html
...

100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 23.5049 s, 4.5 MB/s

通过输出结果可以看到,本地到 dbwu.tech 的网络带宽大约 4.5 MB/s 。