我按照https://github.com/jtmelton/appsensor/blob/master/sample-apps/DemoSetup.md上的说明运行AppSensor。
运行客户端数据生成器时,一切看起来都很美。
我正在我的桌面应用中添加http://localhost:8085/api/v1.0/events的活动,它们会在仪表板上显示,也可以在地图上显示。但他们没有引发回应。
我从我的应用程序发送的请求与客户端数据生成器生成的请求相同。以下几个例子:
{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Input Validation","label":"IE1","responses":[]},"timestamp":"2017-05-08T17:07:06.076Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}
{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Input Validation","label":"IE2","responses":[]},"timestamp":"2017-05-08T17:07:06.076Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}
{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Request","label":"RE3","responses":[]},"timestamp":"2017-05-08T15:56:47.473Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}}
{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Authentication","label":"AE4","responses":[]},"timestamp":"2017-05-08T17:07:06.076Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}
我无法弄清楚为什么我的请求不会触发来自数据生成器工具的相同请求的服务器的响应。
更新1: 有人问我是否发送了足够的事件来触发回复,答案是肯定的。
更新2: 我被要求共享服务器日志,here是。
更新3: 我被要求尝试使用cURL而且我做了。结果相同。即记录事件但未触发响应。我发送curl请求(相同的时间戳)大约50次。
curl -v --header "Content-Type: application/json" --header "X-Appsensor-Client-Application-Name2: myclientapp" -X POST -d '{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Input Validation","label":"IE1","responses":[]},"timestamp":"2017-05-08T15:56:47.473Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}' http://localhost:8085/api/v1.0/events
为Windows格式化的相同请求
curl -v --header "Content-Type: application/json" --header "X-Appsensor-Client-Application-Name2: myclientapp" -X POST -d "{\"user\":{\"username\":\"bob\",\"ipAddress\":{\"address\":\"10.10.10.1\",\"geoLocation\":{\"latitude\":37.596758,\"longitude\":-121.647992}}},\"detectionPoint\":{\"category\":\"Input Validation\",\"label\":\"IE1\",\"responses\":[]},\"timestamp\":\"2017-05-08T15:56:47.473Z\",\"detectionSystem\":{\"detectionSystemId\":\"myclientapp\"},\"metadata\":[]}" http://localhost:8085/api/v1.0/events
更新4:感谢@jtmelton的帮助。通过查看代码我意识到我的appsensor服务器和我的客户端应用程序使用不同的时区。一旦我将时区添加到我的时间戳就行了!!!
答案 0 :(得分:1)
请参阅有关问题的更新4。始终在时间戳中包含时区。在我的情况下,请求时间戳早于服务器时间,因此忽略它们。
C#
DateTime.Now.ToString(" YYYY' - ' MM' - ' DD' T' HH':'毫米&# 39;:' ss.fffzzz&#34)
答案 1 :(得分:0)
根据我的理解,appsensor演示版不会根据您的请求为您提供任何有意义的REST响应。
演示中的 REST / WebSocket服务器取决于appsensor-ws-rest-server-2.2.0.jar
,它在类RestRequestHandler中提供端点。对/api/v1.0/events
或/api/v1.0/attacks
的任何POST都会通过方法HTTP 201 - created
以public void addEvent(Event event)
回答。出于某些原因,在我的CURL测试中,我观察到HTTP 204 - no content
,但没关系。
可以从/api/v1.0/responses
端点读取响应,例如使用EventManager的方法public Collection<Response> getResponses(String earliest)
,其中earliest
是DateTime值。由于earliest
是唯一的查询参数,因此您将收到自给定dateTime以来服务器存储的所有用户的响应。使用演示中的 REST / WebSocket服务器,我认为没有任何可能被appsensor通知,您必须明确查询应用程序的响应。