PDA

View Full Version : TrackerPod deficiencies


RickB
November 8th 03, 08:44 PM
I just got a TrackerPod with the newest 4.13 software. It's a great idea,
but the software implementation is horrible, and the documentation is worse.

For those unfamiliar with the TrackerPod, it is basically a robotic tripod
that plugs into a USB port. It comes with software to control the
trackerpod itself, as well as any Webcam that you want to mount on it.
However, there are multiple deficiencies:

1) The TrackerPod has it's own embedded Web server on the default port of
8090. This by itself is not bad. If you control your own firewall you can
open up port 8090 and access from the Web. The problem is their idea of
"security". The Java applets send user ids and passwords in clear text, and
the embedded Web server doesn't support SSL. So anyone viewing packets
along the route can get your user id and password. At the end of this
message is the captured packet. The user id is "webuser" and the password
is "mypassword". Also, there is no way to tell how secure the embedded Web
server itself is, since it is not well known and has never been evaluated.

2) #1 would not be an issue if you could host the pages in your existing web
server, since you could then enable permissions on the directories and
enable SSL to encrypt the packets. I installed PHP (most of the
TrackerPod's pages use PHP) and created a virtual directory to point to the
TrackerPods root web directory. All the pages ran fine, but none of the
configured user credentials can be found, so you can't log in. I found the
user password file, but there is no documentation to tell you how the
location of that file relates to your Web root. I suspect that the
TrackerPod binary just knows where it is and loads it, separate from the
backend PHP stuff.

3) So I decided to create a small backend program to access the trackerpod
myself. This seems silly since the TrackerPod comes with everything I need,
albeit without any way to run it securely. There is a (poorly written) MFC
C++ program and a Visual Basic program. The C++ program allows you to enter
the IP address of the TrackerPod machine as well as a user id and password,
but this seems dubious, since it will only work on the machine running the
TrackerPod with "localhost" as the address. The command strings are not
documented anywhere. You have to debug through the program and see what
strings are being created for each command. The Visual Basic program is
better (maybe because it wasn't written by the TrackerPod people) but you
still have to eyball the source code to determine the command structure.
Come on guys, we're talking about maybe 20 lines of documentation here.
Surely you could provide it explicitly.

4) Even the TrackerPod binary is needlessly obtuse. Yes, you can figure it
out. But it completely ignores the notion of "progressive discoverability".
In other words, it is just as difficult to figure out how to perform a
common action as it is one that you will do only once or twice. It is
poorly organized. executed, and scattered about.

My conclusion is that the TrackerPod software is useless across the Internet
unless you are completely unconcerned about security, and needlessly
diffcult to use locally. Having said that, the hardware is inexpensive and
does what it says, as advertised. For my use, I will have to write a Web
front end with a backend that communicates with the TrackerPod via a TCP
connection simply to control pan and tilt. That seems liek I have to do an
awful lot to get basic functionality safely over the Internet. This is due
to the architectural choices made by the TrackerPod development team. If
they has simply provided a way for their applets to access their access
control list, or provided a way to deactivate user/password control and turn
off thier embedded Web server, I could simply place thier Web directory
structure under an existing Web server and been done with it.

Following is the packet capture showing the clear text user id (webuser) and
password (mypassword):

Frame: Base frame properties
Frame: Time of capture = 11/8/2003 15:15:3.929
Frame: Time delta from previous physical frame: 0 microseconds
Frame: Frame number: 92
Frame: Total frame length: 292 bytes
Frame: Capture frame length: 292 bytes
Frame: Frame data: Number of data bytes remaining = 292 (0x0124)
ETHERNET: ETYPE = 0x0800 : Protocol = IP: DOD Internet Protocol
ETHERNET: Destination address : 000102998208
ETHERNET: .......0 = Individual address
ETHERNET: ......0. = Universally administered address
ETHERNET: Source address : 00304870155B
ETHERNET: .......0 = No routing information present
ETHERNET: ......0. = Universally administered address
ETHERNET: Frame Length : 292 (0x0124)
ETHERNET: Ethernet Type : 0x0800 (IP: DOD Internet Protocol)
ETHERNET: Ethernet Data: Number of data bytes remaining = 278 (0x0116)
IP: ID = 0x85C4; Proto = TCP; Len: 278
IP: Version = 4 (0x4)
IP: Header Length = 20 (0x14)
IP: Precedence = Routine
IP: Type of Service = Normal Service
IP: Total Length = 278 (0x116)
IP: Identification = 34244 (0x85C4)
IP: Flags Summary = 2 (0x2)
IP: .......0 = Last fragment in datagram
IP: ......1. = Cannot fragment datagram
IP: Fragment Offset = 0 (0x0) bytes
IP: Time to Live = 128 (0x80)
IP: Protocol = TCP - Transmission Control
IP: Checksum = 0xF145
IP: Source Address = 192.168.0.251
IP: Destination Address = 192.168.0.140
IP: Data: Number of data bytes remaining = 258 (0x0102)
TCP: .AP..., len: 238, seq: 326580888-326581126, ack:3821987721, win:14060,
src: 2498 dst: 8090
TCP: Source Port = 0x09C2
TCP: Destination Port = 0x1F9A
TCP: Sequence Number = 326580888 (0x13773A98)
TCP: Acknowledgement Number = 3821987721 (0xE3CEE789)
TCP: Data Offset = 20 (0x14)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x18 : .AP...
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....1... = Push function
TCP: .....0.. = No Reset
TCP: ......0. = No Synchronize
TCP: .......0 = No Fin
TCP: Window = 14060 (0x36EC)
TCP: Checksum = 0x2A50
TCP: Urgent Pointer = 0 (0x0)
TCP: Data: Number of data bytes remaining = 238 (0x00EE)
00000: 00 01 02 99 82 08 00 30 48 70 15 5B 08 00 45 00 ...??..0Hp.[..E.
00010: 01 16 85 C4 40 00 80 06 F1 45 C0 A8 00 FB C0 A8 ..?Ä@.?.ñEÀ¨.ûÀ¨
00020: 00 8C 09 C2 1F 9A 13 77 3A 98 E3 CE E7 89 50 18 .?.Â.?.w:?ãÎç?P.
00030: 36 EC 2A 50 00 00 50 4F 53 54 20 2F 6C 6F 67 69 6ì*P..POST /logi
00040: 6E 2E 70 68 70 33 20 48 54 54 50 2F 31 2E 30 0D n.php3 HTTP/1.0.
00050: 0A 55 73 65 72 2D 41 67 65 6E 74 3A 20 54 72 61 .User-Agent: Tra
00060: 63 6B 65 72 43 61 6D 48 74 74 70 2F 31 2E 30 0D ckerCamHttp/1.0.
00070: 0A 41 63 63 65 70 74 3A 20 77 77 77 2F 73 6F 75 .Accept: www/sou
00080: 72 63 65 3B 20 74 65 78 74 2F 68 74 6D 6C 3B 20 rce; text/html;
00090: 69 6D 61 67 65 2F 67 69 66 3B 20 2A 2F 2A 0D 0A image/gif; */*..
000A0: 43 6F 6E 74 65 6E 74 2D 74 79 70 65 3A 61 70 70 Content-type:app
000B0: 6C 69 63 61 74 69 6F 6E 2F 78 2D 77 77 77 2D 66 lication/x-www-f
000C0: 6F 72 6D 2D 75 72 6C 65 6E 63 6F 64 65 64 0D 0A orm-urlencoded..
000D0: 43 6F 6E 74 65 6E 74 2D 6C 65 6E 67 74 68 3A 20 Content-length:
000E0: 36 30 0D 0A 0D 0A 77 68 69 63 68 62 75 74 74 6F 60....whichbutto
000F0: 6E 3D 52 65 6D 6F 74 65 43 6F 6E 74 72 6F 6C 26 n=RemoteControl&
00100: 75 73 65 72 49 44 3D 77 65 62 75 73 65 72 26 70 userID=webuser&p
00110: 61 73 73 77 6F 72 64 3D 6D 79 70 61 73 73 77 6F assword=mypasswo
00120: 72 64 0D 0A rd..

Electro
November 9th 03, 12:04 PM
I don't own a trackerpod, and I never want to.

I ruled the product as being bad because of their web interface applets,
being so slow, but this is just the icing on the cake!

Well done on your research!

--
-Dave


"RickB" > wrote in message
...
> I just got a TrackerPod with the newest 4.13 software. It's a great idea,
> but the software implementation is horrible, and the documentation is
worse.
>
> For those unfamiliar with the TrackerPod, it is basically a robotic tripod
> that plugs into a USB port. It comes with software to control the
> trackerpod itself, as well as any Webcam that you want to mount on it.
> However, there are multiple deficiencies:
>
> 1) The TrackerPod has it's own embedded Web server on the default port of
> 8090. This by itself is not bad. If you control your own firewall you
can
> open up port 8090 and access from the Web. The problem is their idea of
> "security". The Java applets send user ids and passwords in clear text,
and
> the embedded Web server doesn't support SSL. So anyone viewing packets
> along the route can get your user id and password. At the end of this
> message is the captured packet. The user id is "webuser" and the password
> is "mypassword". Also, there is no way to tell how secure the embedded
Web
> server itself is, since it is not well known and has never been evaluated.
>
> 2) #1 would not be an issue if you could host the pages in your existing
web
> server, since you could then enable permissions on the directories and
> enable SSL to encrypt the packets. I installed PHP (most of the
> TrackerPod's pages use PHP) and created a virtual directory to point to
the
> TrackerPods root web directory. All the pages ran fine, but none of the
> configured user credentials can be found, so you can't log in. I found
the
> user password file, but there is no documentation to tell you how the
> location of that file relates to your Web root. I suspect that the
> TrackerPod binary just knows where it is and loads it, separate from the
> backend PHP stuff.
>
> 3) So I decided to create a small backend program to access the trackerpod
> myself. This seems silly since the TrackerPod comes with everything I
need,
> albeit without any way to run it securely. There is a (poorly written)
MFC
> C++ program and a Visual Basic program. The C++ program allows you to
enter
> the IP address of the TrackerPod machine as well as a user id and
password,
> but this seems dubious, since it will only work on the machine running the
> TrackerPod with "localhost" as the address. The command strings are not
> documented anywhere. You have to debug through the program and see what
> strings are being created for each command. The Visual Basic program is
> better (maybe because it wasn't written by the TrackerPod people) but you
> still have to eyball the source code to determine the command structure.
> Come on guys, we're talking about maybe 20 lines of documentation here.
> Surely you could provide it explicitly.
>
> 4) Even the TrackerPod binary is needlessly obtuse. Yes, you can figure
it
> out. But it completely ignores the notion of "progressive
discoverability".
> In other words, it is just as difficult to figure out how to perform a
> common action as it is one that you will do only once or twice. It is
> poorly organized. executed, and scattered about.
>
> My conclusion is that the TrackerPod software is useless across the
Internet
> unless you are completely unconcerned about security, and needlessly
> diffcult to use locally. Having said that, the hardware is inexpensive
and
> does what it says, as advertised. For my use, I will have to write a Web
> front end with a backend that communicates with the TrackerPod via a TCP
> connection simply to control pan and tilt. That seems liek I have to do
an
> awful lot to get basic functionality safely over the Internet. This is
due
> to the architectural choices made by the TrackerPod development team. If
> they has simply provided a way for their applets to access their access
> control list, or provided a way to deactivate user/password control and
turn
> off thier embedded Web server, I could simply place thier Web directory
> structure under an existing Web server and been done with it.
>
> Following is the packet capture showing the clear text user id (webuser)
and
> password (mypassword):
>
> Frame: Base frame properties
> Frame: Time of capture = 11/8/2003 15:15:3.929
> Frame: Time delta from previous physical frame: 0 microseconds
> Frame: Frame number: 92
> Frame: Total frame length: 292 bytes
> Frame: Capture frame length: 292 bytes
> Frame: Frame data: Number of data bytes remaining = 292 (0x0124)
> ETHERNET: ETYPE = 0x0800 : Protocol = IP: DOD Internet Protocol
> ETHERNET: Destination address : 000102998208
> ETHERNET: .......0 = Individual address
> ETHERNET: ......0. = Universally administered address
> ETHERNET: Source address : 00304870155B
> ETHERNET: .......0 = No routing information present
> ETHERNET: ......0. = Universally administered address
> ETHERNET: Frame Length : 292 (0x0124)
> ETHERNET: Ethernet Type : 0x0800 (IP: DOD Internet Protocol)
> ETHERNET: Ethernet Data: Number of data bytes remaining = 278 (0x0116)
> IP: ID = 0x85C4; Proto = TCP; Len: 278
> IP: Version = 4 (0x4)
> IP: Header Length = 20 (0x14)
> IP: Precedence = Routine
> IP: Type of Service = Normal Service
> IP: Total Length = 278 (0x116)
> IP: Identification = 34244 (0x85C4)
> IP: Flags Summary = 2 (0x2)
> IP: .......0 = Last fragment in datagram
> IP: ......1. = Cannot fragment datagram
> IP: Fragment Offset = 0 (0x0) bytes
> IP: Time to Live = 128 (0x80)
> IP: Protocol = TCP - Transmission Control
> IP: Checksum = 0xF145
> IP: Source Address = 192.168.0.251
> IP: Destination Address = 192.168.0.140
> IP: Data: Number of data bytes remaining = 258 (0x0102)
> TCP: .AP..., len: 238, seq: 326580888-326581126, ack:3821987721,
win:14060,
> src: 2498 dst: 8090
> TCP: Source Port = 0x09C2
> TCP: Destination Port = 0x1F9A
> TCP: Sequence Number = 326580888 (0x13773A98)
> TCP: Acknowledgement Number = 3821987721 (0xE3CEE789)
> TCP: Data Offset = 20 (0x14)
> TCP: Reserved = 0 (0x0000)
> TCP: Flags = 0x18 : .AP...
> TCP: ..0..... = No urgent data
> TCP: ...1.... = Acknowledgement field significant
> TCP: ....1... = Push function
> TCP: .....0.. = No Reset
> TCP: ......0. = No Synchronize
> TCP: .......0 = No Fin
> TCP: Window = 14060 (0x36EC)
> TCP: Checksum = 0x2A50
> TCP: Urgent Pointer = 0 (0x0)
> TCP: Data: Number of data bytes remaining = 238 (0x00EE)
> 00000: 00 01 02 99 82 08 00 30 48 70 15 5B 08 00 45 00 ...??..0Hp.[..E.
> 00010: 01 16 85 C4 40 00 80 06 F1 45 C0 A8 00 FB C0 A8 ..?Ä@.?.ñEÀ¨.ûÀ¨
> 00020: 00 8C 09 C2 1F 9A 13 77 3A 98 E3 CE E7 89 50 18 .?.Â.?.w:?ãÎç?P.
> 00030: 36 EC 2A 50 00 00 50 4F 53 54 20 2F 6C 6F 67 69 6ì*P..POST /logi
> 00040: 6E 2E 70 68 70 33 20 48 54 54 50 2F 31 2E 30 0D n.php3 HTTP/1.0.
> 00050: 0A 55 73 65 72 2D 41 67 65 6E 74 3A 20 54 72 61 .User-Agent: Tra
> 00060: 63 6B 65 72 43 61 6D 48 74 74 70 2F 31 2E 30 0D ckerCamHttp/1.0.
> 00070: 0A 41 63 63 65 70 74 3A 20 77 77 77 2F 73 6F 75 .Accept: www/sou
> 00080: 72 63 65 3B 20 74 65 78 74 2F 68 74 6D 6C 3B 20 rce; text/html;
> 00090: 69 6D 61 67 65 2F 67 69 66 3B 20 2A 2F 2A 0D 0A image/gif; */*..
> 000A0: 43 6F 6E 74 65 6E 74 2D 74 79 70 65 3A 61 70 70 Content-type:app
> 000B0: 6C 69 63 61 74 69 6F 6E 2F 78 2D 77 77 77 2D 66 lication/x-www-f
> 000C0: 6F 72 6D 2D 75 72 6C 65 6E 63 6F 64 65 64 0D 0A orm-urlencoded..
> 000D0: 43 6F 6E 74 65 6E 74 2D 6C 65 6E 67 74 68 3A 20 Content-length:
> 000E0: 36 30 0D 0A 0D 0A 77 68 69 63 68 62 75 74 74 6F 60....whichbutto
> 000F0: 6E 3D 52 65 6D 6F 74 65 43 6F 6E 74 72 6F 6C 26 n=RemoteControl&
> 00100: 75 73 65 72 49 44 3D 77 65 62 75 73 65 72 26 70 userID=webuser&p
> 00110: 61 73 73 77 6F 72 64 3D 6D 79 70 61 73 73 77 6F assword=mypasswo
> 00120: 72 64 0D 0A rd..
>
>
>