linuxudp端口怎么测试(linux udp 端口)-编程知识网

路由器udp端口映射的方法有哪几种?

如何设置端口映射端口映射(Port Mapping/Port Forwarding)有点类似服务重定向, 所以有些路由器(Router)中也称为虚拟服务器(Virtual Server)。为了描述方便, 下面的叙述中统一称为。

采用端口映射的方法,可以实现从Internet 到局域网内部机器的特定端口服务的访问。

端口映射的实现方式可以分为纯软件和软硬结合方式。

以纯软件方式实现端口映射功能软件有很多, 比如, MS Windows9x/200/XP 下的PortTunnel 专门针对HTTP、FTP、SMTP 服务的端口映射,提供了较多的参数设置,在相应的标签菜单下调整。

又如各种版本的Linux 操作系统本身就支持端口映射, 只需要网络管理员做相应的设置和调整即可实现。

而以软硬结合方式实现端口映射功能的, 主要常见于各种路由器(提供网关路由功能) 。下面主要介绍各种路由器(Router)中如何实现端口映射一般路由器中有个端口映射(Port Mapping)或者虚拟服务器(Virtual Server)的设置。

用户需要在路由器(Router)的“管理界面”中相应的端口映射界面中, 设置好相应的需要映射的端口, 协议,内网地址等, 才能生效。

设置的方法可能会因为路由器(Router)不同的品牌和型号,在设置的方法上也会有所不同。端口映射支持的网络协议有TCP/UDP/两者, 所以进行端口映射设置时, 如果不熟悉, 可以选择两者都支持。

如何分析udp报文,从而获取源地址?

、写了一个UDP 的小程序,有一个UDP 的server,而且有UDP的client。

然后执行server和client,然后用tcpdump将该端口的UDP数据报文抓取出来。

执行的过程是这样的。

client向server发送”xiyou”

server向client应答”wangzhe”

client程序在主机example上运行(192.168.1.144)

server程序在主机linux上运行(192.168.1.101)

————————————————————————————————————

2、UDP数据报文。

linux@linux:~$ sudo tcpdump -vvv -X udp port 7777

password for linux:

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

11:03:01.923227 IP (tos 0x0, ttl 64, id 0, offset 0, flags , proto UDP (17), length 48)

example.local.43521 > linux.7777: UDP, length 20

0x0000: 4500 0030 0000 4000 4011 b677 c0a8 0190 E..0..@.@..w….

0x0010: c0a8 0165 aa01 1e61 001c 4c34 7869 796f …e…a..L4xiyo

0x0020: 7500 0000 0000 0000 0000 0000 0000 0000 u……………

11:03:01.923343 IP (tos 0x0, ttl 64, id 0, offset 0, flags , proto UDP (17), length 48)

linux.7777 > example.local.43521: UDP, length 20

0x0000: 4500 0030 0000 4000 4011 b677 c0a8 0165 E..0..@.@..w…e

0x0010: c0a8 0190 1e61 aa01 001c 8473 7761 6e67 …..a…..swang

0x0020: 7a68 6500 0000 0000 0000 0000 0000 0000 zhe………….

由上面的报文可知,有两个UDP数据报文。

第一个报文是example主机上的client向server发送数据。

4500 0030 0000 4000 4011 b677 c0a8 0190 c0a8 0165 这20个数据是IP首部。

aa01 1e61 001c 4c34 这8个字节是UDP的首部。

7869 796f 7500 0000 0000 0000 0000 0000 0000 0000 这20个数据是我用sendto函数发送的

数据。

而将char req = “xiyou” 的ASCII码(16进制)就是:

78 69 79 6f 75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

第二个报文是linux向主机example做出的应答。

4500 0030 0000 4000 4011 b677 c0a8 0165 c0a8 0190 这20个数据是IP首部。

1e61 aa01 001c 8473 这8个字节是UDP首部。

7761 6e67 7a68 6500 0000 0000 0000 0000 0000 0000 这20个数据是应用层的数据。

而将char reply = “wangzhe”的ASCII码(16进制)就是:

77 61 6e 67 7a 68 65 0 0 0 0 0 0 0 0 0 0 0 0 0

由此看出,应用层的数据没有夹杂其他的参数,全部是数据,均是字符的ASCII码。

———————————————————————–

附带网络程序:

udp_server.c

#include <stdio.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <string.h>

int main(void)

{

struct sockaddr_in server,client;

int sockfd;

int cli_len = 0,n;

char req = {0},reply = {0};

sockfd = socket(AF_INET,SOCK_DGRAM,0);

if (sockfd < 0) {

perror(“socket error!n”);

exit(-1);

}

memset(&server,0,sizeof(struct sockaddr_in));

server.sin_family = AF_INET;

server.sin_addr.s_addr = htonl(INADDR_ANY);

server.sin_port = htons(7777);

if (bind(sockfd,(struct sockaddr *)&server,sizeof(server)) < 0) {

perror(“bind error!n”);

exit(-1);

}

for (;;) {

cli_len = sizeof(struct sockaddr_in);

n = recvfrom(sockfd,req,20,0,(struct sockaddr *)&client,&cli_len);

if (n < 0) {

perror(“recvfrom error!n”);

exit(-1);

}

printf(“hello!n”);

strncpy(reply,”wangzhe”,sizeof(“wangzhe”));

if (sendto(sockfd,reply,20,0,(struct sockaddr *)&client,sizeof(client)) != 20) {

perror(“sendto error!n”);

exit(-1);

}

}

return 0;

}

———————————————————————————————————–

udp_client.c

#include <stdio.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <string.h>

int main(void)

{

int sockfd,n;

struct sockaddr_in server;

char req={0},reply={0};

sockfd = socket(AF_INET,SOCK_DGRAM,0);

if (sockfd < 0) {

perror(“socket error!n”);

exit(-1);

}

memset(&server,0,sizeof(server));

server.sin_family = AF_INET;

server.sin_addr.s_addr = inet_addr(“192.168.1.101”);

server.sin_port = htons(7777);

strncpy(req,”xiyou”,sizeof(“xiyou”));

printf(“sendto req to server:%sn”,req);

if (sendto(sockfd,req,20,0,(struct sockaddr *)&server,sizeof(server)) != 20) {

perror(“sendto error!n”);

exit(-1);

}

if ((n = recvfrom(sockfd,reply,20,0,(struct sockaddr *)NULL,(int *)NULL)) < 0) {

perror(“recvfrom error!n”);

exit(-1);

}

printf(“recv reply from server :%sn”,reply);

exit(0);

udp3100端口怎么设置?

      开始→控制面板→安全中心→windows防火墙→高级→最上面的“设置”→添加→选中UDP→输入IP地址→随便写个服务名称→此服务外部端口号和内部端口号设置为3100→确定。

udp端口?

UDP端口 是指传输层UDP协议使用的端口,端口号0-65535,一些使用UDP传输数据的特殊应用层进程有定义好的端口号,即通过熟知的端口号可以知道传送的是哪种应用层服务,如TFTP(简单文件传输协议)对应UDP端口号是69

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP数据报的方法。RFC 768描述了 UDP。

linux telnet命令怎么看端口通不通?

我的:Linux Telnet命令可以查看端口通或者不通。一般是telnet IP 端口号。

1.如果通的话,会弹出一个界面或者进入一个其他的窗口。

2.如果不通,会提示connection refused。

所以根据telnet的命令可以判断端口通不通。

 还可以使用nmap命令去测试端口通不通。nmap可以测试TCP和UDP端口。具体方法是:

  nmap -sT 101.200.188.138 -p 22测试TCP端口,把IP和端口号换成自己需要测试的就行。