我试图了解spydroid(https://code.google.com/p/spydroid-ipcamera/)的工作原理,以便我可以为我的手机编写类似的应用程序。基于spydroid,这是我对RTSP、RTCP和RTP的理解。
RTSP 在指定端口上运行并设置一切。
RTCP 可以在任何端口上运行。有一个客户端端口和一个服务器端口。这是RTP的控制流程
RTP 可以在任何端口上运行。有一个客户端端口和一个服务器端口。其中包含音频和视频流。这很令人困惑,因为它似乎实际上并未在此端口上发送音频和视频。在spydroid中,它在端口5006上发送视频,在5004上发送音频。
Spydroid 正在通过 RTSP 发送此消息以确认端口...传输:RTP/AVP/UDP;单播;destination=123.456.789.00;client_port=65234-65235;server_port=44580-44581;ssrc=ba98a863;mode=play
我认为这意味着客户端(在我的例子中是 VLC)正在使用 UDP 侦听 65234 的 RTP 和 65235 的 RTCP 消息。此外,spydroid 正在侦听 44580 的 RTP 和 44581 的 RTCP。这是正确的吗?
现在,在 RTSP 的 DESCRIBE 序列中,spydroid 告诉客户端 m=video 5006 RTP/AVP 96 我认为这表明它将通过端口 5006 通过 UDP 发送视频。
我在上面的句子中所说的一切听起来都正确吗?
我真正想知道的是如何将此信息转发到正确的端口。客户端端口由 VLC 自动分配。我尝试运行这个命令... vlc "rtsp://192.168.1.104:8086" --rtp-client-port=58866 但VLC似乎忽略它并选择它自己的端口。所以我转发了端口 8086、5004 和 5006,但我不知道为 RTP 和 RTCP 连接转发哪个端口,因为它每次都会改变。我可以完成这项工作的唯一方法是将所有端口转发到我的计算机。(我有一个 linksys 路由器,它有一个 DMZ 选项)但这是一个糟糕的解决方案。有人可以指导我正确的方向吗?
另外,很高兴知道我正在这样做,因为我是通过互联网上的外部 IP 地址发送所有内容。其中spydroid旨在在局域网上使用。
我浏览了这篇文章以在 chrome 中设置端口转发。
虽然我能够为非安全 (http) 端口解决这个问题,但我无法让它为安全 (https) 端口工作。在这两种情况下(http 和 https),页面都会加载到我的笔记本电脑中。只是 https 页面没有加载到我的 android 手机中。
这是 https 站点的配置。
有人可以帮忙吗?
要连接到以 --no-browser 选项启动的远程 jupyter 服务器,我通常会进行本地端口转发并使用 Web 浏览器连接到服务器。但是,我想使用 vscode 的 python 扩展及其“指定 Jupyter 服务器 URI”选项连接到该服务器。目前,我尝试传递相同的 url ,例如http://127.0.01:8888/notebooks/some_nb.ipynb?token=asd45366778875434.adsdsgd35331,但没有任何反应。如何在 vscode 中连接到此服务器表单?任何帮助将不胜感激。
portforwarding remote-server visual-studio-code jupyter-notebook
在我的公司,我们目前有一个 REST API,只能通过特定的跳转盒访问。
我想从运行我的 Python 代码的服务器 ssh 到此框,以进行其余调用。
我在下面编写了这段代码,但是当我运行它时,它挂起并且没有执行任何操作:
from sshtunnel import SSHTunnelForwarder
import requests
remote_user = 'me'
remote_host = 'jump.box.net'
remote_port = 22
local_host = '10.30.22.218'
local_port = 443
server = SSHTunnelForwarder(
(remote_host, remote_port),
ssh_username=remote_user,
ssh_private_key_password='mypassword',
ssh_private_key='~/.ssh/mykey',
remote_bind_address=(local_host, local_port),
)
server.start()
r = requests.get(url = 'https://ourinternalendpoint.com/api/stuff',verify=False).content
print(r)
server.stop()
Run Code Online (Sandbox Code Playgroud)
本地主机 IP 实际上是我们的内部端点域的 IP。
我究竟做错了什么?我知道远程主机名是正确的,端口、用户、ssh-ing 的私钥和密码也是正确的。
server.start() 命令也完成。它挂在 get 请求上。
我是在 Linux 服务器上执行此操作的,如果需要,我愿意使用 Bash 为我的 Python 脚本进行端口转发。
是否有与kubectl
to对应的命令:
ssh -L8888:rds.aws.com:5432 example.com
Run Code Online (Sandbox Code Playgroud)
kubectl
有port-forward
,你也可以指定--address
但严格要求的IP地址。
我有一个在端口运行的Python服务器28009
:
python3 -m http.server 28009
Run Code Online (Sandbox Code Playgroud)
现在,在运行服务器后,我调用 QEMU 来转发端口28009
:
qemu-system-aarch64 -nographic -machine virt,gic-version=max -m 512M -cpu max -smp 4 \
-netdev user,id=vnet,hostfwd=tcp::28009-:28009 -device virtio-net-pci,netdev=vnet \
-drive file=ubuntu-image.img,if=none,id=drive0,cache=writeback -device virtio-blk,drive=drive0,bootindex=0 \
-drive file=flash0.img,format=raw,if=pflash -drive file=flash1.img,format=raw,if=pflash
Run Code Online (Sandbox Code Playgroud)
它会产生一个错误:
qemu-system-aarch64: Could not set up host forwarding rule 'tcp::28009-:28009'
Run Code Online (Sandbox Code Playgroud)
同样,如果我首先运行上面的 QEMU 脚本,它会正常启动。然而,Python 服务器现在抛出一个错误:
Traceback (most recent call last):
File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/lib/python3.6/http/server.py", line 1211, in <module>
test(HandlerClass=handler_class, port=args.port, …
Run Code Online (Sandbox Code Playgroud) 提供端口转发对象
from kubernetes.stream import stream, portforward
pf = portforward(
k8s_client_v1.connect_get_namespaced_pod_portforward,
pod_name,
name_space,
ports=port
)
pf.socket(port)
Run Code Online (Sandbox Code Playgroud)
pf
是来自 family 的套接字对象AF_UNIX
。
我需要更好地了解是否AF_INET
必须实例化另一个系列套接字才能实现与kubectl
客户端相同的功能,例如:kubectl port-forward $pod_name $port
如果有人可以分享此类实现的任何片段,我预先表示感谢。
此时创建端口转发对象的灵感来自于这里
ngrok 只为我转发到 https,当其他服务尝试访问端点时,这会给出 ssl 证书错误。
大多数时候,ngrok 会转发到 http和https,但由于某种原因,我的 ngrok 在使用以下命令后才转发到 https:ngrok http 4554 --host-header=localhost:4554
如何强制 ngrok 转发到 http 而不是 https?
我正在尝试设置我认为是相当常见的Django开发服务器配置,但我遇到了客户操作系统和主机操作系统之间的端口转发问题.
我在跑:
我正在使用NAT连接到VirtualBox并使用内置的VirtualBox端口转发功能(来自访客的设置 - >网络 - >端口转发菜单),以便我的.vbox XML包含以下部分:
<NAT>
<DNS pass-domain="true" use-proxy="false" use-host-resolver="false"/>
<Alias logging="false" proxy-only="false" use-same-ports="false"/>
<Forwarding name="guestdjango" proto="1" hostip="127.0.0.2" hostport="9080" guestport="8080"/>
<Forwarding name="guesthttp" proto="1" hostip="127.0.0.2" hostport="8080" guestport="80"/>
<Forwarding name="guestssh" proto="1" hostip="127.0.0.2" hostport="2222" guestport="22"/>
</NAT>
Run Code Online (Sandbox Code Playgroud)
从主机,我可以SSH/SFTP到2222端口的guest,我可以看到nginx"欢迎来到nginx!" 在127.0.0.2:8080.
在验证这些之后,我设置了Django并运行Django runsever:
python manage.py runserver 127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)
来自嘉宾的Lynx,我在127.0.0.1:8080获得了"祝贺"Django页面.
但是,当我从主机导航到127.0.0.2:9080时,我得到"连接已重置".
我一直试图使端口转发与Net :: SSH一起正常使用。据我了解,如果我希望能够从同一个Ruby程序中使用Net :: SSH会话,则事件处理循环实际上可以处理通过连接发送的数据包。但是,这会导致您在下面看到的丑陋:
#!/usr/bin/env ruby -w
require 'net/ssh'
require 'httparty'
require 'socket'
include Process
log = Logger.new(STDOUT)
log.level = Logger::DEBUG
local_port = 2006
child_socket, parent_socket = Socket.pair(:UNIX, :DGRAM, 0)
maxlen = 1000
hostname = "www.example.com"
pid = fork do
parent_socket.close
Net::SSH.start("hostname", "username") do |session|
session.logger = log
session.logger.sev_threshold=Logger::Severity::DEBUG
session.forward.local(local_port, hostname, 80)
child_socket.send("ready", 0)
pidi = fork do
msg = child_socket.recv(maxlen)
puts "Message from parent was: #{msg}"
exit
end
session.loop do
status = waitpid(pidi, Process::WNOHANG)
puts "Status: #{status.inspect}"
status.nil? …
Run Code Online (Sandbox Code Playgroud) portforwarding ×10
kubernetes ×2
python ×2
android ×1
django ×1
endpoint ×1
forward ×1
https ×1
net-ssh ×1
networking ×1
ngrok ×1
port ×1
qemu ×1
rtcp ×1
rtp ×1
rtsp ×1
ruby ×1
sockets ×1
ssh ×1
tunnel ×1
ubuntu-11.04 ×1
virtualbox ×1