社区
网络编程
帖子详情
我想快速的知道某个IP地址某个端口是否在监听?
cococut
2005-03-18 11:05:56
我想tcp连接的时候,感觉很慢,特别是不在同一个局域网上的时候。
比如:
132.12.12.1连接143.34.34.3 这种的,要等待很长时间后,才返回不能建立连接,
我想要很快返回不能连接的,
有没有别的编程的办法?
哪有代码可以实现?
谢谢!
...全文
270
8
打赏
收藏
我想快速的知道某个IP地址某个端口是否在监听?
我想tcp连接的时候,感觉很慢,特别是不在同一个局域网上的时候。 比如: 132.12.12.1连接143.34.34.3 这种的,要等待很长时间后,才返回不能建立连接, 我想要很快返回不能连接的, 有没有别的编程的办法? 哪有代码可以实现? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cococut
2005-03-18
打赏
举报
回复
BOOL CTryPortDlg::DoScanPort(short dwPort)
{
DWORD g_dwTimeOut = 1000; //连接超时时间,以ms计
DWORD dwRet;
short nPort =dwPort;
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == INVALID_SOCKET)
{
AfxMessageBox("创建套接字失败!");
dwRet = -1;
}
else
{
unsigned long flag = 1;
if ((ioctlsocket(sock, FIONBIO, &flag) != 0))
{
AfxMessageBox("未能改为非阻塞模式!");
dwRet = -1;
}
else
{
unsigned long g_ulAddr = INADDR_NONE;
sockaddr_in severAddr;
severAddr.sin_family = AF_INET;
severAddr.sin_port = htons(nPort);
severAddr.sin_addr.S_un.S_addr = inet_addr("198.16.16.122");
connect(sock, (sockaddr*)&severAddr, sizeof(severAddr));
struct fd_set mask;
FD_ZERO(&mask);
FD_SET(sock, &mask);
struct timeval timeout;
timeout.tv_sec = g_dwTimeOut / 1000;
timeout.tv_usec = g_dwTimeOut % 1000;
switch(select(0, NULL, &mask, NULL, &timeout))
{
case -1:
dwRet = -1;
break;
case 0:
dwRet = 0;
break;
default:
dwRet = 1;
};
}
closesocket(sock);
}
if (dwRet == 1)
{
return TRUE;
}
else
{
return FALSE;
}
return dwRet;
}
谢谢大家,简单的做超时,可以满足我的要求!
zengwujun
2005-03-18
打赏
举报
回复
mark
sharkhuang
2005-03-18
打赏
举报
回复
netstat
jerry
2005-03-18
打赏
举报
回复
下面这段程序就是一个TCP探测的例子,当然,并没有做得完美,因为没有接收部分,而在WIN2000下实际就是一个选择性的SNIFFER,呵呵,大家可以使用其他的SNIFFER来实现同样的目的。也可以改变下面的程序只发送IP包,利用ICMP特性来实现探测。
#include <stdio.h>;
#include <winsock2.h>;
#include <ws2tcpip.h>;
#define SOURCE_PORT 7234
#define MAX_RECEIVEBYTE 255
typedef struct ip_hdr //定义IP首部
{
unsigned char h_verlen; //4位首部长度,4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //16位总长度(字节)
unsigned short ident; //16位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IPHEADER;
typedef struct tsd_hdr //定义TCP伪首部
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //协议类型
unsigned short tcpl; //TCP长度
}PSDHEADER;
typedef struct tcp_hdr //定义TCP首部
{
USHORT th_sport; //16位源端口
USHORT th_dport; //16位目的端口
unsigned int th_seq; //32位序列号
unsigned int th_ack; //32位确认号
unsigned char th_lenres; //4位首部长度/6位保留字
unsigned char th_flag; //6位标志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校验和
USHORT th_urp; //16位紧急数据偏移量
}TCPHEADER;
//CheckSum:计算校验和的子函数
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >;1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size )
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >;>; 16) + (cksum &; 0xffff);
cksum += (cksum >;>;16);
return (USHORT)(~cksum);
}
void usage()
{
printf(";******************************************\n";);
printf(";TCPPing\n";);
printf(";\t Written by Refdom\n";);
printf(";\t Email: refdom@263.net\n";);
printf(";Useage: TCPPing.exe Target_ip Target_port \n";);
printf(";*******************************************\n";);
}
int main(int argc, char* argv[])
{
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN addr_in;
IPHEADER ipHeader;
TCPHEADER tcpHeader;
PSDHEADER psdHeader;
char szSendBuf[60]={0};
BOOL flag;
int rect,nTimeOver;
usage();
if (argc!= 3)
{ return false; }
if (WSAStartup(MAKEWORD(2,2), &;WSAData)!=0)
{
printf(";WSAStartup Error!\n";);
return false;
}
if ((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)
{
printf(";Socket Setup Error!\n";);
return false;
}
flag=true;
if (setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&;flag,sizeof(flag))==SOCKET_ERROR)
{
printf(";setsockopt IP_HDRINCL error!\n";);
return false;
}
nTimeOver=1000;
if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&;nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR)
{
printf(";setsockopt SO_SNDTIMEO error!\n";);
return false;
}
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(atoi(argv[2]));
addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);
//
//
//填充IP首部
ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long));
// ipHeader.tos=0;
ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader));
ipHeader.ident=1;
ipHeader.frag_and_flags=0;
ipHeader.ttl=128;
ipHeader.proto=IPPROTO_TCP;
ipHeader.checksum=0;
ipHeader.sourceIP=inet_addr(";本地地址";);
ipHeader.destIP=inet_addr(argv[1]);
//填充TCP首部
tcpHeader.th_dport=htons(atoi(argv[2]));
tcpHeader.th_sport=htons(SOURCE_PORT); //源端口号
tcpHeader.th_seq=htonl(0x12345678);
tcpHeader.th_ack=0;
tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<4|0);
tcpHeader.th_flag=2; //修改这里来实现不同的标志位探测,2是SYN,1是FIN,16是ACK探测 等等
tcpHeader.th_win=htons(512);
tcpHeader.th_urp=0;
tcpHeader.th_sum=0;
psdHeader.saddr=ipHeader.sourceIP;
psdHeader.daddr=ipHeader.destIP;
psdHeader.mbz=0;
psdHeader.ptcl=IPPROTO_TCP;
psdHeader.tcpl=htons(sizeof(tcpHeader));
//计算校验和
memcpy(szSendBuf, &;psdHeader, sizeof(psdHeader));
memcpy(szSendBuf+sizeof(psdHeader), &;tcpHeader, sizeof(tcpHeader));
tcpHeader.th_sum=checksum((USHORT *)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader));
memcpy(szSendBuf, &;ipHeader, sizeof(ipHeader));
memcpy(szSendBuf+sizeof(ipHeader), &;tcpHeader, sizeof(tcpHeader));
memset(szSendBuf+sizeof(ipHeader)+sizeof(tcpHeader), 0, 4);
ipHeader.checksum=checksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader));
memcpy(szSendBuf, &;ipHeader, sizeof(ipHeader));
rect=sendto(sock, szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader),
0, (struct sockaddr*)&;addr_in, sizeof(addr_in));
if (rect==SOCKET_ERROR)
{
printf(";send error!:%d\n";,WSAGetLastError());
return false;
}
else
printf(";send ok!\n";);
closesocket(sock);
WSACleanup();
return 0;
}
sdwalnut1
2005-03-18
打赏
举报
回复
关注~
ndy_w
2005-03-18
打赏
举报
回复
我想要很快返回不能连接的
------------------------
意思是很快返回“在一定时间内”不能连接的吧?总得等等看吧?
老夏Max
2005-03-18
打赏
举报
回复
不尝试链接怎么能确定是否在监听?
关注!
吹泡泡的小猫
2005-03-18
打赏
举报
回复
使用半开扫描方式,直接发送ask IP包,看看是否有回应,有没有都返回,不用建立连接,就比较快。
需要对TCP/IP的三次握手协议很了解
Shell编程---监控检查某个TCP或UDP
端口
是否
在
监听
题目要求:使用Shell脚本监控检查某个TCP或UDP
端口
是否
在
监听
分析:
端口
检测是系统资源检测经常遇到的,特别是在网络通讯情况下,
端口
状态的检测往往是很重要的。有时可能进程,CPU,内存等处于正常状态,但是
端口
处于异常状态,业务也是没有正常运行。 我们可以判断指定
端口
是否
在
监听
。 首先使用 netstat -an 输出所有
端口
占用信息,然后通过 grep, awk,wc 过滤输出
监听
TCP...
端口
及
端口
监听
我们可以把
端口
理解为 程序对外开放的接口。 通过某一
端口
来提供某一项服务。ip上有某一个接口,说明该程序在运行,没有就说明该程序没在运行。 在图中我们可以看到在Local address 这一列,有的在
监听
0.0.0.0:
端口
,有的在
监听
127.0.0.1:
端口
,还有的在
监听
独立IP :
端口
,那么他们都代表什么呢?又有什么区别呢? 0.0.0.0 代表了
监听
这台服务器上所有的IP的某个
端口
,外面的人可以访问所有本机的IP
监听
的
端口
127.0.0.1 代表了只允许本机访问
监听
的
端口
192.168.
什么是通配
监听
端口
? 什么是通配
监听
IP?
TCP/IP协议下每个
端口
只能由一个服务独占
监听
,一个服务或应用会指定
监听
特定的一个或多个
端口
来接收客户端的连接请求。则是指服务器配置为接收来自哪些网络接口(即哪些
IP地址
)上连接请求的行为。指的是服务器或服务开启的特定TCP或UDP
端口
号,等待客户端连接或发送数据。在计算机网络和TCP/IP协议中,并没有“通配
监听
端口
”这一标准概念。,这意味着服务器将
监听
所有可用网络接口上的连接请求。什么是通配
监听
端口
?什么是通配
监听
IP?”时,如在IPv4中的。
cmd中检测远程的ip和
端口
是否
处于
监听
状态
第一步:使用ping命令测试远程的ip
是否
可连通在cmd中输入ping
ip地址
: 如果最后的统计信息中丢失率为0表示可以连通该
ip地址
。那么就可以进行下一步的测试该ip下的某一个
端口
是否
开放的操作了。第二步:使用telnet测试远程某一个ip的
端口
是否
开放为了安全起见,windows默认是不开启telnet客户端的,要通过控制面板—》程序–》启动或关闭windows功能—》telnet客户端—》
cmd查看某个服务器
端口
状态,cmd中检测
端口
是否
处于
监听
状态 | IT博客
1、查看本地
端口
监听
状态命令:netstat -anLocal Address:本地地址Foreign Address :外地的地址State:LISTENING该
端口
在
监听
外部连接,established表示已建立连接 Foreign Address 就会有个
ip地址
查看那些
端口
被占用了C:>netstat -aon|findstr “80″TCP 0.0.0.0:19780...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章