socket问题,如何实现象ping一样的功能?

djfdd 2004-04-11 02:34:17
我想实现象ping一样的功能,来查询一个ip是否在线,如何实现?
...全文
206 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
djfdd 2004-04-17
  • 打赏
  • 举报
回复
谢谢莫依,我试试你的方法,但要不知道这样扫描一台机器需要多长时间?
wqhj2000 2004-04-17
  • 打赏
  • 举报
回复
daisy8675(莫依) ,你的方法不是在ping对方主机而是在扫描对方的端口吧,如果对方主机加载了防火墙屏蔽所有端口,那么你的程序将一个端口也扫不到,而且这种方法将会在对方主机留下太多的连接日志(你扫描多少个端口,就会留下多少条连接记录),对方可以很轻易的知道你的意图。如果不想留下连接记录,可以发送TCP SYN,当收到TCP SYN & ACK消息后再发送一个RST消息,这样就不会建立一个完整的连接了,从而使对方难以发现。
如果想测试对方主机是否在线还是用发ICMP包来解决,但有两个问题:
1。VB winsock好象不支持ICMP协议,只支持TCP和UDP协议;
2。即使用发ICMP包的方式来测试对方主机是否在线,也可能会遇到对方防火墙的屏蔽;

高手们有没有什么解决办法??
daisy8675 2004-04-17
  • 打赏
  • 举报
回复

PING某个端口:就不叫ping了,叫掃描,大概我上面貼的就管用了,呵呵


我大概是昨天發錯了,ping是用ICMP來試探的。但是防火牆屏蔽掉了,應該也是沒有辦法過去的。

如果你用過掃描器的話,你就知道,掃描的時間超過的時候,就會認為超時間,不給予連接了。換掃下一個機器了。

如果對方主機是否在線,我已經很久沒有弄這塊了,以前第一次和某人遇見時間,他就把我機器的端口掃完,因為機器一定會有端口開放的
djfdd 2004-04-17
  • 打赏
  • 举报
回复
我只是想知道某个IP的机器是否在线,而不是想要PING某个端口.
djfdd 2004-04-17
  • 打赏
  • 举报
回复
我想查询一个ip是否在线,并想绕过防火墙,如何实现?
djfdd 2004-04-17
  • 打赏
  • 举报
回复
能否想办法穿过防火墙?
daisy8675 2004-04-16
  • 打赏
  • 举报
回复
Option Explicit
Dim PortNo As Long

Private Sub Command1_Click()
PortNo = CLng(Text2.Text)
Text4.Text = ""
Command2.Enabled = True
Command1.Enabled = False
Winsock1.Connect Text1.Text, PortNo
Me.Caption = "連接埠掃瞄編號:" & PortNo
End Sub

Private Sub Command2_Click()
Command1.Enabled = True
Command2.Enabled = False
Winsock1.Close
PortNo = CLng(Text2.Text)
End Sub

Private Sub Form_Load()
Text1.Text = "127.0.0.1"
Text2.Text = "1"
Text3.Text = "32767"
Label1.Caption = "IP 位址"
Label2.Caption = "起始連接埠"
Label3.Caption = "終止連接埠"
Command1.Caption = "開始掃描"
Command2.Caption = "停止"
End Sub


Private Sub Winsock1_Connect()
Text4.Text = Text4.Text & "連接埠編號:" & Str(Winsock1.RemotePort) & vbCrLf
Winsock1.Close
PortNo = PortNo + 1
If PortNo <= CLng(Text3.Text) Then
Me.Caption = "連接埠掃瞄編號:" & PortNo
Winsock1.Connect Text1.Text, PortNo
Else
Command2_Click
End If
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, _
ByVal Scode As Long, ByVal Source As String, _
ByVal HelpFile As String, ByVal HelpContext As Long, _
CancelDisplay As Boolean)

Winsock1.Close
PortNo = PortNo + 1
If PortNo <= CLng(Text3.Text) Then
Me.Caption = "連接埠掃瞄:" & PortNo
Winsock1.Connect Text1.Text, PortNo
Else
Command2_Click
End If
End Sub
wqhj2000 2004-04-16
  • 打赏
  • 举报
回复
我所了解的是:ping对方主机实际上是向对方主机发送一个ICMP请求回应包,而VB提供的winsock好象不支持发送ICMP包,我也没试过,不太清楚。你最好看看MSDN里有没有这方面内容。
hyc001 2004-04-16
  • 打赏
  • 举报
回复
关注

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧